python - 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
那么这个视图对象的相等是什么意思呢?
解决方案
字典视图类实现自己的相等方法。的文档dict.values()
特别说:
一个
dict.values()
视图和另一个视图之间的相等比较将始终返回 False。这也适用于dict.values()
与自身进行比较时
对于dict.keys()
and dict.items()
,字典视图的文档说:
键视图类似于集合,因为它们的条目是唯一且可散列的。如果所有值都是可散列的,因此
(key, value)
对是唯一且可散列的,则项目视图也是类似集合的。(值视图不被视为类似集合,因为条目通常不是唯一的。)对于类似集合的视图,为抽象基类定义的所有操作collections.abc.Set
都可用(例如,==
、<
或^
)。
推荐阅读
- ios - Google 登录 SDK 与帐户断开连接
- git - 如何将远程master合并到远程测试中
- node.js - 没有可用于电子导航的有效版本
- ag-grid-react - 如何将两个标题列合并为 ag-grid-react 中的一列?
- checkbox - Slickgrid - 分组行中的复选框未在前端检查,但在后端获取数据
- python - Python中闭包和装饰器的区别
- bash - 在同一函数中获取期望脚本的退出代码
- c# - 尝试对使用模拟任务的方法进行单元测试时出现问题
- heroku - 在 heroku 中添加了 antiword buildpack 但出现错误
- flutter - 如何从 Flutter 对话框返回数据?