对于定义为
的两个字典d1
和d2
d1 = {'foo':123, 'bar':789}
d2 = {'bar':789, 'foo':123}
键的顺序在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)
为什么Python仍然认为d1
和d2
相等?
>>> d1 == d2
True
答案 0 :(得分:6)
字典是哈希表,顺序无关紧要。在python 3.6+中,字典按插入顺序排列,但这就是它们的实现方式。秩序对平等并不重要。如果您想让订单事项平等,请使用OrderedDict。
from collections import OrderedDict
d1 = OrderedDict({'foo':123, 'bar':789})
d2 = OrderedDict({'bar':789, 'foo':123})
print(d1 == d2) # False
答案 1 :(得分:2)
在Python 3.6之前,字典是无序的。因此,检验平等的唯一明智的方法是忽略顺序。当Python 3.6订购字典时,这是一个实现细节。从Python 3.7开始,可以依赖插入顺序。但是,如果将行为更改为仅在键的顺序相同时才认为字典相等,则会破坏整个代码。坦率地说,我认为比较字典而不考虑顺序会更有用。