Python 字典中的遍历顺序

Python 字典中的遍历顺序,python,Python,当我访问使用相同键映射的两个字典中的元素时,它们是否始终以相同的顺序访问 例如,假设我有字典1和字典2 Dictionary 1: Key 1: a1 Key 2: a2 Dictionary 2: Key 1: b1 Key 2: b2 如果我使用for循环访问这两个字典的元素,使用如下内容: 字典中元素的值(): 然后我可以匹配a1:b1和a2:b2?不,没有这样的保证 下面是一个具体的例子来说明这一点: >>> dict1 = {str(i):None for i i

当我访问使用相同键映射的两个字典中的元素时,它们是否始终以相同的顺序访问

例如,假设我有字典1和字典2

Dictionary 1:
Key 1: a1
Key 2: a2

Dictionary 2:
Key 1: b1
Key 2: b2
如果我使用for循环访问这两个字典的元素,使用如下内容: 字典中元素的
值():


然后我可以匹配
a1:b1
a2:b2

不,没有这样的保证

下面是一个具体的例子来说明这一点:

>>> dict1 = {str(i):None for i in range(10000)}
>>> dict2 = {}
>>> dict2.update(dict1)
字典是相等的,但键的返回顺序不同:

>>> dict1 == dict2
True
>>> dict1.keys() == dict2.keys()
False
如果需要相同的遍历顺序,可以并行迭代排序的
sorted(dict1.keys())
和排序的
sorted(dict2.keys())

根据您的用例(即插入顺序),也可能有用。

在python中没有顺序。对于保持顺序的数据类型:使用

从官方python文档:

最好将字典视为一组无序的键:值 配对,要求密钥是唯一的(在一个 字典)

有关它们为何无序的更多信息,请查看以下答案:

不保证在字典中有任何顺序

但您可以在元组列表中获得已排序的键、值对。例如:

chars = {'a':0, 'c':2, 'f':6, 'h':8}
sorted_chars = sorted(chars.iteritems(), key=operator.itemgetter(1)) 
# list of tuples sorted by value => [('a', 0), ('c', 2), ('f', 6), ('h', 8)]
你可以试着用它给你的字典加上一些顺序

from collections import OrderedDict

d1 = OrderedDict([('ka1','a1'), ('ka2','a2')])
d2 = OrderedDict([('kb1','b1'), ('kb2','b2')])

for k1, k2 in zip(d1, d2):
    print d1[k1], d2[k2]
将打印:

a1 b1
a2 b2

如果它们有相同的键,只需迭代一个键,然后从这两个键中获取该键的值。为什么要依赖顺序?我相当肯定,您可以相信这样一个事实,即连续两次调用dict.values(),而不调用该dict将产生相同的结果。但这并不是DICT的一个特点,它之所以发生是因为没有任何其他事情发生的原因:认为字典完全没有秩序。假设每次调用
\uu iter\uu
都返回
random.choice(self.keys())
;)
a1 b1
a2 b2