use*_*623 3 python dictionary list set
我的列表多次包含相同的词典,例如
喜欢
[ {'name': 'ZYLOG SYSTEMS LTD', 'gram': '1'}, {'name': 'ZYLOG SYSTEMS LTD', 'gram': '1'}]
Run Code Online (Sandbox Code Playgroud)
当我对其应用集合操作以使其与众不同时,它给出
TypeError: unhashable type: 'dict'
Run Code Online (Sandbox Code Playgroud)
使此类列表项与众不同的正确方法是什么?
字典是可变对象,因此不能存储在集合中。您可以将字典转换为表示相同数据的不可变对象;对这些应用操作后,set()
您可以转换回字典:
unique = [dict(t) for t in set(tuple(sorted(d.items())) for d in l)]
Run Code Online (Sandbox Code Playgroud)
这会将每个字典转换为包含所有键值对的排序元组;然而,这假设字典中的值也是不可变的。
需要排序是因为可能会产生两个具有相同键值对的字典,但由于哈希冲突而以不同的顺序列出它们;两个键可以映射到同一个哈希表槽,但先插入的键将获胜:
>>> {'bar': 42, 'baz': 81} == {'baz': 81, 'bar': 42}
True
>>> list({'bar': 42, 'baz': 81}) == list({'baz': 81, 'bar': 42}) # compare keys in order
False
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4691 次 |
最近记录: |