Python 3.6+:具有相同键但顺序不同的两个字典的相等性

Ada*_*ula 0 python

对于两个字典d1d2定义为

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仍然考虑d1d2保持平等?

>>> d1 == d2
True
Run Code Online (Sandbox Code Playgroud)

Err*_*rse 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
Run Code Online (Sandbox Code Playgroud)