Skip to main content
 首页 » 编程设计

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

2025年05月04日19shihaiming

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

 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 的算法.关键是将字典转换为某种不可变类型。