簡體   English   中英

python遍歷列表,並刪除字典中列表內發現的所有重復項,並刪除重復項

[英]python iterate over a list and remove any duplicates found within lists inside a dictionary and remove the duplicates

我有一個數字列表和一個帶有名稱(鍵)和數字(值)的字典,我需要遍歷名為lotto的列表,然后對照字典中名稱的值檢查它們,如果我找到匹配項,則刪除該列表字典值中的數字。

這是我到目前為止的東西,但它只是打印出原始的字典鍵和值

players = {'ray': [1,2,3,6,7,8,], 'al':[1,2,3,4,8,9,]}
lotto =[1,2,3,4,5,6,]

for i in players.values():  
    if i in lotto:
       players.values.remove(i)  

print (players)

任何幫助

您以錯誤的方式訪問dict值。 看一下以下內容:

players = {'ray': [1,2,3,6,7,8,], 'al':[1,2,3,4,8,9,]}
lotto =[1,2,3,4,5,6,]

for p, val in players.items():  
    for num in lotto:
        if num in val:
            players[p].remove(num)

print (players)  # {'al': [8, 9], 'ray': [7, 8]}

如果列表值中的項目順序對您而言並不重要,則可以使用以下更快的變體:

players = {'ray': [1,2,3,6,7,8], 'al':[1,2,3,4,8,9]}
lotto = [1,2,3,4,5,6]
lotto = set(lotto)

for p, val in players.items():
    players[p] = list(set(val) - lotto)

print (players)  # {'ray': [8, 7], 'al': [8, 9]}

也可以在以下單行代碼中進行壓縮(盡管它可以重新創建dict而不是對其進行修改):

players = {k: list(set(val) - lotto) for k, v in players.items()}

您的問題是您試圖從錯誤的列表中刪除號碼。 players.values每個鍵的值的列表,而不是每個鍵的單個值的列表 使用每個鍵的單獨值:

players = {'ray': [1,2,3,6,7,8,], 'al':[1,2,3,4,8,9,]}
lotto = [1,2,3,4,5,6,]

for key, value in players.items():
    for i in lotto:
        if i in value:
            value.remove(i)

print(players)

然后可以通過使用字典理解來縮短:

players = {'ray': [1,2,3,6,7,8,], 'al':[1,2,3,4,8,9,]}
lotto =[1,2,3,4,5,6,]

players = {k: list(set(v) - set(lotto)) for k, v in players.items()}
print(players) # {'ray': [8, 7], 'al': [8, 9]}

另外,如果程序中列表的順序無關緊要,建議您改用set s。 它們提供了有效的元素查找,並使執行這樣的操作非常簡單:

>>> players = {'ray': {1,2,3,6,7,8,}, 'al':{1,2,3,4,8,9,}}
>>> lotto = {1,2,3,4,5,6,}
>>> {k: v - lotto for k, v in players.items()}
{'ray': {8, 7}, 'al': {8, 9}}
>>> 

您可以這樣過濾:

players = {'ray': [1,2,3,6,7,8,], 'al':[1,2,3,4,8,9,]}

lotto =[1,2,3,4,5,6]

new_players = {a:[i for i in b if i not in lotto] for a, b in players.items()}

輸出:

{'al': [8, 9], 'ray': [7, 8]}

暫無
暫無

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

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