dict.keys()相等,顺序无关



为什么我得到True为什么比较dict.keys()时,键是在不同的顺序?我在windows cpython 3.10上,它保留了自3.6+以来的插入顺序,但我想知道这个结果是否适用于更早的版本。

d1 = {1:2, 2:3, 3:4}
d2 = {3:5, 2:6, 1:7}
print(d1.keys() == d2.keys()) # True
print(list(d1.keys()) == list(d2.keys())) # False

Dictionary视图对象的文档解释如下:

键视图是类集合的,因为它们的条目是唯一的并且是可哈希的。如果所有值都是可散列的,因此(键、值)对是唯一的且可散列的,那么项目视图也是类似于集合的。(值视图不被视为类集合,因为条目通常不是唯一的。)对于类集合视图,为抽象基类collections.abc.Set定义的所有操作都是可用的(例如==、<或^)。>

所以==工作就好像dict.keys()一组。

字典键可以按插入顺序检索,但它仍然是一个集合,无论顺序如何,集合都应该进行比较。事实上,所有集合比较操作都是有效的(并在适当的时候返回pythonset)。如果d1 | d2的操作根据插入顺序而不同,那将是奇怪的。相等是一样的。

相关内容

最新更新