为了账号安全,请及时绑定邮箱和手机立即绑定

列表中的字典:使用 .update() 进行条件更新

列表中的字典:使用 .update() 进行条件更新

红颜莎娜 2021-11-23 20:18:02
我正在尝试使用条件更新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填充键?
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

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


查看完整回答
反对 回复 2021-11-23
?
慕的地10843

TA贡献1785条经验 获得超8个赞

尝试这个:


for item in nodes:

    for item2 in source:

        if item["id"] == item2[0]:

            item.update( {"inDegree": item2[1]})

            break

        else:

            item.update( {"inDegree": 0})


查看完整回答
反对 回复 2021-11-23
  • 2 回答
  • 0 关注
  • 187 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信