【问题标题】:What happens when you set a dictionary in python?在 python 中设置字典时会发生什么?
【发布时间】:2020-02-15 12:22:53
【问题描述】:

当我在字典上使用 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 的键...请注意,list(a) 同样会返回一个键列表,并且迭代 dict 会迭代其键。

标签: python dictionary set


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    字典是可迭代的。当您遍历字典时,您将获得键。所以set(d) 会给你一个新的集合,其中包含字典d 的所有键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 2019-06-14
      • 2011-05-11
      • 1970-01-01
      相关资源
      最近更新 更多