我有一本叫做图(有向图)的字典,里面有人和它的友情,给人以这种友情的分量。我想在此字典中删除特定的人,或更改这种友谊的重要性。在字典中,我有一组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)]}
另一个问题是改变友谊的分量。例如,将“名称5”和“名称3”的友好权重更改为2,结果如下:
graph={'Name1': [('Name2', 1),('Name3',3),('Name8',2)], 'Name5': [('Name1',2), ('Name3',2)], 'Name2':[('Name3',1),('Name5',4)]}
答案 0 :(得分:0)
对于第一个问题,一种方法是从字典中过滤'Name1'
键值,然后将其他键与字典解包运算符合并(有关此用法here的更多信息):>
{**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)