【发布时间】:2016-03-03 22:23:19
【问题描述】:
大概 dict_keys 应该表现为一个类似集合的对象,但它们缺少 difference 方法,并且减法行为似乎有所不同。
>>> d = {0: 'zero', 1: 'one', 2: 'two', 3: 'three'}
>>> d.keys() - [0, 2]
{1, 3}
>>> d.keys() - (0, 2)
TypeError: 'int' object is not iterable
为什么 dict_keys 类在这里尝试迭代一个整数?这不违反鸭子打字吗?
>>> dict.fromkeys(['0', '1', '01']).keys() - ('01',)
{'01'}
>>> dict.fromkeys(['0', '1', '01']).keys() - ['01',]
{'1', '0'}
【问题讨论】:
-
元组是不可变的,因此可能是字典本身的键,在这种情况下,这将是模棱两可的——如果不是在语法上,那么至少在程序员的脑海中是这样。
-
@L3viathan 我不相信,因为
dict.fromkeys('0123').keys() - '02'仍然有效 -
只有
tuples 和ints 是特殊的吗?dict.fromkeys('0123').keys() - ('0', '2')给{'1', '3'}。 -
有趣的是,字典视图映射应该是类似“set”的,但 set 不支持这一点:
set((0,1,2,3)) - [0,2]导致 'set' 和 'str' 的操作数不受支持.
标签: python python-3.x