Dict会以相同的顺序返回键和值吗?

时间:2009-06-18 12:24:11

标签: python

  

可能重复:
  Python dictionary: are keys() and values() always the same order?

如果我在python中有一个dictonary,那么.keys和.values会以相同的顺序返回相应的元素吗?

E.g。

foo = {'foobar' : 1, 'foobar2' : 4, 'kittty' : 34743}

对于它返回的键:

>>> foo.keys()
['foobar2', 'foobar', 'kittty']

现在,foo.values()将返回元素的顺序与其对应的键相同吗?

3 个答案:

答案 0 :(得分:18)

很难改进Python documentation

  

键和值以任意顺序列出,这是非随机的,在Python实现中各不相同,并且取决于字典的插入和删除历史。如果items()keys()values()iteritems()iterkeys()itervalues()被调用而没有对字典进行干预,则列表将会直接对应。这允许使用(value, key)创建zip(): pairs = zip(d.values(), d.keys()).对。对iterkeys()itervalues()方法保持相同的关系:pairs = zip(d.itervalues(), d.iterkeys())为对提供相同的值。另一种创建相同列表的方法是pairs = [(v, k) for (k, v) in d.iteritems()]

因此,简而言之,“是”,但请注意,您不得在致电keys()和致电values()之间修改字典。

答案 1 :(得分:1)

是的,他们会

只需查看Python doc上的文档:

  

键和值以任意顺序列出,这是非随机的,在Python实现中各不相同,并且取决于字典的插入和删除历史。如果调用items(),keys(),values(),iteritems(),iterkeys()和itervalues()而没有对字典进行干预修改,则列表将直接对应。

最好的办法仍然是使用dict.items()

答案 2 :(得分:1)

从Python 2.6文档:

  

键和值以任意顺序列出,这是非随机的,在Python实现中各不相同,并且取决于字典的插入和删除历史。如果items()keys()values()iteritems()iterkeys()itervalues()被调用而没有对字典进行干预,则列表将会直接对应。这允许使用zip(): pairs = zip(d.values(), d.keys())创建(值,键)对。 iterkeys()itervalues()方法使用相同的关系:pairs = zip(d.itervalues(), d.iterkeys())为对提供相同的值。另一种创建相同列表的方法是pairs = [(v, k) for (k, v) in d.iteritems()]

我已经超过99%确定Python 3.0也适用。