当您在python中设置字典时会发生什么?

时间:2019-10-18 13:31:33

标签: python dictionary set

当我在字典上使用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)只返回密钥,这有什么用?

谢谢!

2 个答案:

答案 0 :(得分:2)

函数set(x)接受任何可迭代的x并将所有迭代的值放入集合中。

字典是可迭代的。当您遍历字典时,会得到密钥。因此,set(d)将为您提供包含字典d的所有键的新集合。

答案 1 :(得分:2)

set将任意可迭代对象转换为集合,这意味着获取其参数的迭代器。 dict的迭代器返回其密钥。 setdict有用不是很多,但是set并不是关心它的论点是什么。

关于dict迭代器为何返回dict的键的问题,这是语言设计人员做出的任意选择,但请记住,鉴于迭代键的选择,值或键值对,在键上进行迭代可能是有用性和简单性之间的最佳折衷方案。 (这三个都可以通过d.keys()d.values()d.items()显式使用;在某种意义上,iter(d)对于d.keys()的常见用例来说是一种方便。)