首页 > 解决方案 > 列表中的字典:使用 .update() 进行条件更新

问题描述

我正在尝试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}]

'nodes' 中的每个项目都应由inDegree基于 'source' 列表的新键 ( ) 值对扩展。我的代码:

for item in sources:
    for item2 in nodes:
        if item2["id"] == item[0]:
            item2.update( {"inDegree": item[1]})
        else:
            item2.update( {"inDegree": 0})

inDegree问题:如果“源”列表中的“节点”中的项目没有匹配的 ID,我如何通过源列表中的值或 0 填充键?

标签: pythondictionaryif-statement

解决方案


问题是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}]

推荐阅读