gpt4 book ai didi

python - 从列表字典中过滤元素

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:11 25 4
gpt4 key购买 nike

我有一本名为graph(有向图)的字典,里面有人和它的友谊,赋予了这种友谊的权重。我想删除这个字典中的某个特定的人,或者改变这种友谊的重要性。在字典里我有几组卡住集。字典看起来像这样:

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' 键值,并将其他键与字典解包运算符合并(有关此用法的更多信息 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)

关于python - 从列表字典中过滤元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57740339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com