我有一個字典串列:
list_1 = [{'account': '1234', 'email' : '[email protected]'}, ... , ...]
我想洗掉串列中包含重復電子郵件的條目。
import copy
list_2 = copy.deepcopy(list_1)
for i in mainList
for j in range(len(list_2)-1, -1, -1):
if ((list_2[j]["email"] == mainList[i])):
list_1.remove(list1[j])
mainList這是我正在與之比較值的電子郵件串列。
mainList看起來像這樣:
['[email protected]', '[email protected], ..., ...]
主要問題是list_1沒有正確輸出。如果我使用串列、切片甚至串列理解來復制它,它就會變成空的。最終結果應該list_1只包含每封電子郵件的一個元素/串列/字典。使用 copy 或 deepcopy 至少給了我一些東西。有時我似乎也會遇到索引錯誤。使用for x in list_2:insteadlist_1只回傳一項。我最接近正確答案的是list_1在洗掉專案時對其自身進行迭代,但這并不是 100% 正確的。
uj5u.com熱心網友回復:
遍歷您的字典串列,并僅在新字典中不存在的情況下將每封電子郵件保存在新字典中。
temp = dict()
list_1 = [{'account': '1234', 'email': '[email protected]'}]
for d in list_1:
if d['email'] in temp:
continue
else:
temp[d['email']] = d
final_list = list(temp.values())
uj5u.com熱心網友回復:
好像你想洗掉重復的字典。請在問題中提及重復的字典。
di = [{'account': '1234', 'email' : '[email protected]'}, {'account1': '12345',
'email1' : '[email protected]'}, {'account': '1234', 'email' : '[email protected]'}]
s=[i for n, i in enumerate(d) if i not in di[n 1:]]
Print(s)
這將為您提供所需的輸出
[{'account1': '12345', 'email1': '[email protected]'}, {'account': '1234', 'email':
'[email protected]'}]
uj5u.com熱心網友回復:
我覺得完成此任務的最簡單方法是list_1根據您的密鑰創建(字典)的索引版本。
list_1 = [
{'account': '1234', 'email' : '[email protected]'},
{'account': '1234', 'email' : '[email protected]'},
{'account': '4321', 'email' : '[email protected]'},
]
list_1_indexed = {}
for row in list_1:
list_1_indexed.setdefault(row['email'], row)
list_2 = list(list_1_indexed.values())
print(list_2)
這會給你:
[
{'account': '1234', 'email': '[email protected]'},
{'account': '4321', 'email': '[email protected]'}
]
我不確定我會推薦它,但如果你想使用理解,你可以這樣做:
list_2 = list({row['email']: row for row in list_1}.values())
請注意,第一個策略導致第一個鍵行獲勝,而理解最后一個鍵行獲勝。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/421244.html
標籤:
