【问题标题】:Set of Dictionary elements字典元素集
【发布时间】:2020-03-26 11:07:43
【问题描述】:

我想在 python 中创建一组字典。我知道如何制作字典列表并将其转换为集合,但我想将字典添加到集合中。谁能帮我? 当我尝试以下代码时出现此错误: “发生异常:TypeError 不可散列类型:'dict'”

C = set()
A = {'a':1, 'c':2, 'd':3}
B = {'c':3, 'd':4, 2:5 }
C.add(A)
C.add(B)

谢谢

【问题讨论】:

  • 这是不可能的,因为正如错误所说,dict 类型不可散列。这是因为它们可以在set 中进行更改,这使得拥有set 的原因无效。在 pypi 的某处有一个frozendict
  • 正如@quamrana 所说,dict 是不可散列的,因此不能放在集合中。我很好奇你的声明I know how to make a list of dictionaries and convert it to set,因为将一个字典列表转换为一组字典会有同样的问题。你能展示你用来实现这个目标的代码吗
  • 我不知道您的应用程序,但根据字典的内容,您可能能够将其转换为 JSON 字符串并存储它。然后,当然,您必须在需要时“重构”字典。

标签: python python-3.x dictionary set


【解决方案1】:

以下:

C = set()
A = {'a':1, 'c':2, 'd':3}
B = {'c':3, 'd':4, 2:5 }

你可以做这样的事情来将以上所有内容组合成一个集合。我将使用联合运算符'|'实现这一目标。

{i for i in A.items()} | {i for i in B.items()}

这会导致:

{('a', 1), ('c', 2), ('c', 3), ('d', 3), ('d', 4), (2, 5)}

** 额外信息 **

如果您从一开始就知道字典 B 不包含字典 A 中的任何键,您可以执行以下操作来组合两个字典:

例如:

A = {'a':1, 'c':2, 'd':3}
B = {'e':3, 'f':4, 2:5 }
from collections import Counter
C = Counter(A) + Counter(B)

C 等价于以下:

Counter({'a': 1, 'c': 2, 'd': 3, 'e': 3, 'f': 4, 2: 5})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多