当我在字典上使用set时遇到此问题时,我正在尝试一些想法来解决一个不相关的问题:
a = {"a": 1}
b = {"b": 2}
c = {"a": 1}
set([a, b, c])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-21-7c1da7b47bae> in <module>
----> 1 set([a, b, c])
TypeError: unhashable type: 'dict'
d = {"a": 1, "b": 2}
set(d)
Out[23]: {'a', 'b'}
set(a)
Out[24]: {'a'}
我有点理解为什么这组字典是不可散列的(它们是可变的),但是整个事情对我来说意义不大。为什么set(a)
和set(d)
只返回键,以及如何会是这样有用吗?
谢谢!
set
将任意可迭代对象转换为集合,这意味着为其参数获取一个迭代器。a的迭代器dict
返回其键。这与其说是set
作为一个有用的dict
,但set
不关心它的参数是什么。
至于dict
迭代器为何返回的键的原因dict
,这是语言设计人员做出的任意选择,但请记住,鉴于选择了对键,值或键值对进行迭代,因此对键进行了迭代可能是实用性和简单性之间最好的折衷方案。(这三种方法都可以通过明确的d.keys()
,d.values()
和d.items()
;在某种意义上iter(d)
是为了共同使用的情况下便利d.keys()
。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句