python - 什么时候可以设置 dict_values View (为什么)?

标签 python dictionary set python-datamodel

文档说 values views are not treated as set-like ,但有时它们是:

>>> d = {1: 1}
>>> d.values() | d.keys() 
{1}
>>> d.values() & d.keys() 
{1}
>>> d.values() - d.keys() 
set()

为什么实现集合返回集合语义但随后以实际集合失败?

>>> d.values() - {1}
TypeError: unsupported operand type(s) for -: 'dict_values' and 'set'

最佳答案

这实际上不是 dict_values 处理操作。 keys_view 将通过支持反射方法从右侧加强操作:

>>> set().__rsub__({}.values())
NotImplemented
>>> {}.keys().__rsub__({}.values())
set()

出于类似的原因,set 操作有时会与其他 dict View 一起工作或不工作:

# works, because type(d.items()) implements __rsub__
>>> d.values() - d.items()  
{1}

# fails, because type(d.values()) does not implement __rsub__
>>> d.values() - d.values()
TypeError: unsupported operand type(s) for -: 'dict_values' and 'dict_values'

因此,尽管这种行为似乎违反了鸭子类型,但文档仍然是正确的。

关于python - 什么时候可以设置 dict_values View (为什么)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55940027/

相关文章:

python - 尝试并排除(TypeError)

java - 如何将 jar 文件表示为网络图?

PYTHON/NUMPY : How to assign various data types to the data type object numpy. dtype() 在循环中

java - 根据两个属性折叠对象的 ArrayList 以生成唯一的集合

python - 在 Python 中将整数转换为字符串

Python 无权访问此服务器/从 ZIP 返回城市/州

python - 如何使用python保存内存、pid和进程

python - 如何获取字典列表和字典的嵌套字典中的所有键和值?

java - 在 Java 中创建、搜索和修改(key、value1、value2)的最佳方式

set - 对字符串进行分区的所有方法