代码之家  ›  专栏  ›  技术社区  ›  Jason Coon

Python字典:key()和values()的顺序总是一样的吗?

  •  246
  • Jason Coon  · 技术社区  · 15 年前

    keys() values() 字典的方法总是一对一的映射(假设字典在调用这两个方法之间没有改变)。

    >>> d = {'one':1, 'two': 2, 'three': 3}
    >>> k, v = d.keys(), d.values()
    >>> for i in range(len(k)):
        print d[k[i]] == v[i]
    
    True
    True
    True
    

    8 回复  |  直到 15 年前
        1
  •  416
  •   David Fraser piouson    8 年前

    我们发现:

    如果 items() , keys() values() iteritems() , iterkeys() itervalues() 字典,列表将直接显示 相一致

    2.x documentation 3.x documentation .

        2
  •  95
  •   vvvvv lexa-b    4 年前

    是的,你观察到的确实是担保财产-- keys() values() items() iterkeys() &c也以与相应列表相同的顺序进行迭代。

        3
  •  50
  •   Bjorn    10 年前

    是的 guaranteed in python 2.x

    修改字典时,项目的顺序将直接

        5
  •  7
  •   Sassa NF    6 年前

    很好的文档参考资料。以下是您如何在不考虑文档/实施的情况下保证订单:

    k, v = zip(*d.iteritems())
    
        6
  •  4
  •   sykora    15 年前

    http://docs.python.org/dev/py3k/library/stdtypes.html#dictionary-view-objects ,dict的keys()、values()和items()方法将返回相应的迭代器,其顺序对应。但是,我找不到关于Python2.x的官方文档的参考。

    据我所知,答案是肯定的,但仅限于python 3.0+

        7
  •  4
  •   Koen Bok    15 年前

    值得一提的是,我编写的一些大量使用的生产代码是基于这个假设的,我从来没有遇到过问题。但我知道这并不能使它成为现实:-)

    如果你不想冒险,如果可以的话,我会使用iteritems()。

    for key, value in myDictionary.iteritems():
        print key, value
    
        8
  •  -1
  •   jlansey    7 年前

    keys = dict1.keys()
    ordered_keys1 = [dict1[cur_key] for cur_key in keys]
    ordered_keys2 = [dict2[cur_key] for cur_key in keys]