我在字典列表中有重复项,但是当我在python中使用set时,我无法使其取消
>>> b = [
{"email_address": "aaa", "verify_score": "75"},
{"email_address": "bbb", "verify_score": "75"},
{"email_address": "Emailjcb.ab.baseball@gmail.com", "verify_score": "10"},
{"email_address": "aaa", "verify_score": "75"},
{"email_address": "carolpaterick@gmail.com", "verify_score": "10"},
{"email_address": "37a11ce00909300817u2ca1bb5ka40e8422d4bc38b2@mail.gmail.com", "verify_score": "10"},
]
>>> b = set(list(b))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
>>>
错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
如何使此字典列表独一无二
b = [{"email_address": "aaa", "verify_score": "75"}, {"email_address": "bbb", "verify_score": "75"}, {"email_address": "Emailjcb.ab.baseball@gmail.com", "verify_score": "10"}, {"email_address": "aaa", "verify_score": "75"}, {"email_address": "carolpaterick@gmail.com", "verify_score": "10"}, {"email_address": "37a11ce00909300817u2ca1bb5ka40e8422d4bc38b2@mail.gmail.com", "verify_score": "10"}]
Python 字典是不可散列的,这意味着它们是可变的容器。它们不是始终相同的整数或字符串;内容的顺序可以更改,但在语义上是相同的。
您可以做的是尝试将字典更改为冻结集或其他一些可哈希类型。
>>> unhashable = {'b': 'a', 'a': 'b'}
>>> hashable = frozenset(unhashable.items())
正如Julien在评论中建议的那样,您可以转换为像元组这样的可哈希类型,然后对其进行独特处理:
>>> set(tuple(d.items()) for d in b)
set([(('verify_score', '10'), ('email_address', 'carolpaterick@gmail.com')), (('verify_score', '10'), ('email_address', '37a11ce00909300817u2ca1bb5ka40e8422d4bc38b2@mail.gmail.com')), (('verify_score', '10'), ('email_address', 'Emailjcb.ab.baseball@gmail.com')), (('verify_score', '75'), ('email_address', 'bbb')), (('verify_score', '75'), ('email_address', 'aaa'))])