可能重复:
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()将返回元素的顺序与其对应的键相同吗?
答案 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也适用。