我正在尝试使用条件列表来更新列表nodes
中的字典与另一个列表source
中的元组。
元组列表:
source = [('144 IV 285', 16),
('144 IV 1', 11),
('141 IV 155', 7)]
词典列表:
nodes = [{'id': '144 IV 285','date': '2018-08-15','relevancy': 10, 'outDegree': 18},
{'id': '144 IV 240','date': '2016-08-15','relevancy': 4, 'outDegree': 10}]
“节点”中的每个项目都应基于“源”列表使用新的键(inDegree
)值对进行扩展。我的代码:
for item in sources:
for item2 in nodes:
if item2["id"] == item[0]:
item2.update( {"inDegree": item[1]})
else:
item2.update( {"inDegree": 0})
问题:如果“源”列表中“节点”中的项没有匹配的ID,如何用源列表中的值或0填充键inDegree
?
答案 0 :(得分:0)
问题在于,即使有匹配项,它也会迭代source
,从而覆盖先前的更新。您可以打开source
并进行比较:
for item2 in nodes:
sources = list(zip(*source))
if item2["id"] in sources[0]:
item2.update({"inDegree": sources[1][sources[0].index(item2["id"])]})
else:
item2.update({"inDegree": 0})
print(nodes)
[{'id': '144 IV 285',
'date': '2018-08-15',
'relevancy': 10,
'outDegree': 18,
'inDegree': 16},
{'id': '144 IV 240',
'date': '2016-08-15',
'relevancy': 4,
'outDegree': 10,
'inDegree': 0}]
答案 1 :(得分:0)
尝试一下:
for item in nodes:
for item2 in source:
if item["id"] == item2[0]:
item.update( {"inDegree": item2[1]})
break
else:
item.update( {"inDegree": 0})