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

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

Dictionary 1:
Key 1: a1
Key 2: a2

Dictionary 2:
Key 1: b1
Key 2: b2


如果我使用for循环访问这2个字典的元素,则使用如下代码:
for element in dictionary.values():

然后可以匹配a1:b1a2: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())

>>> sorted(dict1.keys()) == sorted(dict2.keys())
True


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

10-07 22:44