簡體   English   中英

從列表字典中過濾元素

[英]Filter elements from dictionary of lists

我有一本名為graph(有向圖)的字典,里面有人和它的友情,給人以這種友情的分量。 我想在此字典中刪除特定的人,或更改這種友誼的重要性。 在字典中,我有一組Frozensets。 字典看起來像這樣:

graph={'Name1': [('Name2', 1),('Name3',3),('Name8',2)], 'Name5': [('Name1',2), ('Name3',5)], 'Name2':[('Name3',1),('Name5',4)]}

我想刪除特定人的特定朋友。 例如,我想從“ Name1”的友情中刪除“ Name8”,從而得到這個新字典:

graph={'Name1': [('Name2', 1),('Name3',3)], 'Name5': [('Name1',2), ('Name3',5)], 'Name2':[('Name3',1),('Name5',4)]}

另一個問題是改變友誼的分量。 例如,將“ Name5”和“ Name3”的權重更改為2,結果如下:

graph={'Name1': [('Name2', 1),('Name3',3),('Name8',2)], 'Name5': [('Name1',2), ('Name3',2)], 'Name2':[('Name3',1),('Name5',4)]}

對於第一個問題,一種方法是通過過濾字典中的'Name1'鍵值,然后將其他鍵與字典拆包運算符合並(有關此用法的更多信息,在此處 ):

{**graph, **{'Name1':[(i,j) for i,j in graph['Name1'] if i != 'Name8']}}

{'Name1': [('Name2', 1), ('Name3', 3)],
 'Name5': [('Name1', 2), ('Name3', 5)],
 'Name2': [('Name3', 1), ('Name5', 4)]}

第二,類似地,您可以執行以下操作:

{**graph, **{'Name5':[(i,j) if i != 'Name3' else (i,2) for i,j in graph['Name5']]}}

{'Name1': [('Name2', 1), ('Name3', 3), ('Name8', 2)],
 'Name5': [('Name1', 2), ('Name3', 2)],
 'Name2': [('Name3', 1), ('Name5', 4)]}

多種條件過濾的通用解決方案:

from collections import defaultdict

d = defaultdict(list)
for k,v in graph.items():
    if k == 'Name1':
        for i,j in v:
            if i != 'Name8':
                d[k].append((i,j))
    elif k == 'Name5':
        for i,j in v:
            if i != 'Name3':
                d[k].append((i,2))     
            else:
                d[k].append((i,j))     
    else:
        d[k].append(v)

暫無
暫無

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

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