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

标签 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) 只返回键,这有什么用?

谢谢!

最佳答案

set 将任意可迭代对象转换为集合,这意味着为其参数获取迭代器。 dict 的迭代器返回它的键。与其说 setdict 有用,不如说 set 关心它的参数是什么。

至于为什么 dict 迭代器返回 dict 的键,这是语言设计者做出的有点武断的选择,但请记住,给定的选择遍历键、值或键值对,遍历键可能是实用性和简单性之间的最佳折衷。 (所有这三个都可以通过 d.keys()d.values()d.items() 明确获得;在某种意义上iter(d)d.keys() 的常见用例提供了便利。)

关于python - 当你在 python 中设置字典时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58451954/

相关文章:

python - 检测到一个方法是递归的而不调用它?

c# - 以最优化的方式求两组的交集

python - 从 Python 子字典访问值

c++ - 使用用户定义的转换创建映射条目

c++ - 转换位数组以更快地设置

c - C中两个集合的 union 和异或

python - 如何通过当前文件中的 Python 字符串名称实例化类?

python - Pandas :如何有条件地分配多列?

python - Leetcode 426.将二叉搜索树转换为有序双向链表?

python-3.x - 使用 apply/lambda 将分组数据框转换为字典