ben*_*890 1 python dictionary list set typeerror
我有一个字典列表,如下所示:
a = [{1000976: 975},
{1000977: 976},
{1000978: 977},
{1000979: 978},
{1000980: 979},
{1000981: 980},
{1000982: 981},
{1000983: 982},
{1000984: 983},
{1000985: 984}]
Run Code Online (Sandbox Code Playgroud)
我可能认为这是错误的,但我正在将此字典列表与另一个字典列表进行比较,并尝试删除一个列表中另一个列表中的元素(字典)。为了列出操作,我想将两者都转换为集合并执行集合减法。但是,我在尝试进行转换时收到以下错误。
set_a = set(a)
TypeError: unhashable type: 'dict'
Run Code Online (Sandbox Code Playgroud)
我是否错误地思考了这个问题?
尝试这个:
>>> 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
Run Code Online (Sandbox Code Playgroud)
如果您想在两个字典列表之间进行集合减法,则只需在两个字典上使用与上面相同的集合转换,进行减法,然后转换回来。
注意:至少字典中的所有值都应该是可散列的(以及键,但这是不言而喻的)。如果不是,您需要对值进行类似的转换,将其转换为某种可散列的、不可变的类型。
注意:这也不保留原始顺序;如果这对您很重要,则需要将其适应这样的算法。但关键是将字典转换为某种不可变类型。
| 归档时间: |
|
| 查看次数: |
1788 次 |
| 最近记录: |