Py学习  »  Python

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

Adarsh Chavakula • 5 年前 • 1607 次点击  

两本字典 d1 d2 定义为

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仍然考虑 d1号 d2级 平等?

>>> d1 == d2
True
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50075
 
1607 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Pyfisch
Reply   •   1 楼
Pyfisch    5 年前

直到Python3.6,字典都是无序的。因此,检验平等的唯一明智的方法就是忽略秩序。当Python3.6对字典排序时,这是一个实现细节。由于Python 3.7的插入顺序是可以依赖的。但是,如果将行为更改为仅在键的顺序相同时才将字典视为相等,则会中断 很多 代码的。坦率地说,我认为比较字典而不考虑排序更有用。

Error - Syntactical Remorse
Reply   •   2 楼
Error - Syntactical Remorse    5 年前

字典是散列表,顺序不重要。在Python3.6+中,字典按插入顺序排列,但这正是它们的实现方式。秩序与平等无关。如果你想让命令在平等中起作用,使用OrderedDict。

from collections import OrderedDict

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

print(d1 == d2) # False