使字典列表唯一在python中不起作用



我在字典列表中有重复项,但是当我在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'))])

最新更新