python3.6+:两个具有相同键但不同ord的字典的相等性

2024-04-25 06:41:47 发布

您现在位置:Python中文网/ 问答频道 /正文

两个字典d1d2定义为

d1 = {'foo':123, 'bar':789}
d2 = {'bar':789, 'foo':123}

键的顺序在python3.6+中保留。当我们循环浏览字典并打印条目时,这一点很明显。你知道吗

>>> for x in d1.items():
...     print(x)
...
('foo', 123)
('bar', 789)


>>> for x in d2.items():
...     print(x)
...
('bar', 789)
('foo', 123)

为什么Python仍然认为d1d2是相等的?你知道吗

>>> d1 == d2
True

Tags: intruefor字典定义foo顺序bar
2条回答

字典是散列表,顺序并不重要。在python3.6+中,字典是按插入顺序排列的,但这正是它们的实现方式。秩序与平等无关。如果你想让秩序在平等中起作用,就用一个有序的信息。你知道吗

from collections import OrderedDict

d1 = OrderedDict({'foo':123, 'bar':789})
d2 = OrderedDict({'bar':789, 'foo':123})

print(d1 == d2) # False

在python3.6之前,字典都是无序的。因此,检验平等性的唯一明智方法就是忽略顺序。当python3.6对字典进行排序时,这是一个实现细节。由于python3.7,插入顺序是可以依赖的。但是,如果将行为更改为仅在键顺序相同时才考虑字典相等,则会中断大量代码。坦率地说,我认为比较字典而不考虑顺序更有用。你知道吗

相关问题 更多 >