簡體   English   中英

使字典列表唯一不適用於python

[英]Making an list of dictionary unique is not working in 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"}]

正如朱利安(Julien)在評論中所建議的那樣,您可以將其轉換為諸如tuple之類的可哈希類型,然后在此之上進行獨特的處理:

>>> 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'))])

Python字典不可散列 ,這意味着它們是可變容器。 它們不是始終相同的整數或字符串。 內容的順序可以更改,但在語義上是相同的。

您可以做的是嘗試將字典更改為Frozensets或其他一些可哈希的類型。

>>> unhashable = {'b': 'a', 'a': 'b'}
>>> hashable = frozenset(unhashable.items())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM