当我在字典上使用 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
将任意可迭代对象转换为集合,这意味着为其参数获取迭代器。 dict
的迭代器返回它的键。与其说 set
对 dict
有用,不如说 set
关心它的参数是什么。
至于为什么 dict
迭代器返回 dict
的键,这是语言设计者做出的有点武断的选择,但请记住,给定的选择遍历键、值或键值对,遍历键可能是实用性和简单性之间的最佳折衷。 (所有这三个都可以通过 d.keys()
、d.values()
和 d.items()
明确获得;在某种意义上iter(d)
为 d.keys()
的常见用例提供了便利。)
关于python - 当你在 python 中设置字典时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58451954/