python - 将字典列表和变成字典集

标签 python list dictionary set typeerror

我有一个字典列表,如下所示:

 a = [{1000976: 975},
 {1000977: 976},
 {1000978: 977},
 {1000979: 978},
 {1000980: 979},
 {1000981: 980},
 {1000982: 981},
 {1000983: 982},
 {1000984: 983},
 {1000985: 984}]

我可能想错了,但我正在将这个字典列表与另一个字典列表进行比较,并试图删除一个列表中另一个列表中的元素(字典)。为了列出操作,我想将两者转换为集合并执行集合减法。但是,我在尝试进行转换时遇到以下错误。

set_a = set(a)

TypeError: unhashable type: 'dict'

我是不是想错了?

最佳答案

试试这个:

>>> a = [{1000976: 975},
...  {1000977: 976},
...  {1000978: 977},
...  {1000979: 978},
...  {1000980: 979},
...  {1000981: 980},
...  {1000982: 981},
...  {1000983: 982},
...  {1000984: 983},
...  {1000985: 984}]
>>> a.extend(a)  # just to add some duplicates
>>> len(a)
20
>>> dict_set = set(frozenset(d.items()) for d in a)
>>> b = [dict(s) for s in dict_set]
>>> b
[{1000982: 981}, {1000983: 982}, {1000981: 980}, {1000985: 984}, {1000978: 977}, {1000980: 979}, {1000977: 976}, {1000976: 975}, {1000984: 983}, {1000979: 978}]
>>> len(b)
10

如果你想在两个字典列表之间做集合减法,那么只需对两个字典使用与上面相同的集合转换,做减法,然后转换回来。

注意:至少你的字典中的所有值也应该是可哈希的(以及键,但这是不言而喻的)。如果不是,您需要对值进行类似的转换,将其转换为某种可散列的、不可变的类型。

注意:这也没有保留原来的顺序;如果这对您很重要,您需要将其调整为类似 this one 的算法.关键是将字典转换为某种不可变类型。

关于python - 将字典列表和变成字典集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58878561/

相关文章:

python - 如何在python2中捕获在python3中运行的命令的输出?

Python,XML 结构到字典

c++ - 使用指向基础抽象类的指针访问子类成员,这不能是 dynamic_cast

python - 消除 fft 图表中的噪音

python - 使用 python 3 在终端中打印 unicode 字符

python - Django - ModelForm : Add a field not belonging to the model

java - 从列表中多选

python - 递归解析维基百科并从包含的链接中获取文本

java - 将整数列表排序为 Java 中的字符串列表

java - Java Map 中的 put() 函数如何工作?