对于两个字典d1,d2定义为
d1 = {'foo':123, 'bar':789}
d2 = {'bar':789, 'foo':123}
Run Code Online (Sandbox Code Playgroud)
键的顺序在Python 3.6+中保留。当我们遍历字典并打印项目时,这一点很明显。
>>> for x in d1.items():
... print(x)
...
('foo', 123)
('bar', 789)
>>> for x in d2.items():
... print(x)
...
('bar', 789)
('foo', 123)
Run Code Online (Sandbox Code Playgroud)
为什么Python仍然考虑d1并d2保持平等?
>>> d1 == d2
True
Run Code Online (Sandbox Code Playgroud)
字典是哈希表,顺序无关紧要。在python 3.6+中,字典按插入顺序排列,但这就是它们的实现方式。秩序对平等并不重要。如果您想让订单事项平等,请使用OrderedDict。
from collections import OrderedDict
d1 = OrderedDict({'foo':123, 'bar':789})
d2 = OrderedDict({'bar':789, 'foo':123})
print(d1 == d2) # False
Run Code Online (Sandbox Code Playgroud)