首页 > 解决方案 > Python dict的视图对象的等价性

问题描述

Python 的视图对象dict比较与我预期的不同:

a = {0 : 'a', 1 : 'b'}
b = {1 : 'b', 0 : 'a'}

print(a == b) # True
print(a.keys() == b.keys()) # True
print(a.values() == b.values()) # False
print(a.items() == b.items()) # True

有什么特别的原因吗dict.values()False

事实上,在相同的情况下dict(甚至不是副本),它也是False

a = {0 : 'a', 1 : 'b'}
print(a.values() == a.values()) # False

那么这个视图对象的相等是什么意思呢?

标签: pythondictionaryequality

解决方案


字典视图类实现自己的相等方法。的文档dict.values()特别说:

一个dict.values()视图和另一个视图之间的相等比较将始终返回 False。这也适用于dict.values()与自身进行比较时

对于dict.keys()and dict.items()字典视图的文档说:

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


推荐阅读