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

结合2个python字典列表

结合2个python字典列表

POPMUISE 2022-01-05 20:07:01
我有 2 个 python 字典列表。第一个 python 列表如下所示:l1=  [{'compu_method': 'ROTACC', 'aufloesung': '1024'}, {'compu_method': 'TMPOUTS', 'aufloesung': '1'}]第二个 python 列表如下所示:l2=  [{'signal_name': 'XXXX', 'compu_method': 'ROTACC', 'min_wert': '-500', 'max_wert': '500'}, {'signal_name': 'YYYY', 'compu_method': 'TMPOUTS', 'min_wert': '-70', 'max_wert': '184'},  {'signal_name': 'ZZZZ', 'compu_method': 'TMPOUTS', 'min_wert': '-70', 'max_wert': '184'}]两个列表都有compu_method通用。我想aufloesung从第一个列表中的所有compu_method 存在于第二列表。我想要一个像这样的最终列表:[{'signal_name': 'XXXX', 'compu_method': 'ROTACC', 'min_wert': '-500', 'max_wert': '500','aufloesung': '1024'}, {'signal_name': 'YYYY', 'compu_method': 'TMPOUTS', 'min_wert': '-70', 'max_wert': '184','aufloesung': '1'},  {'signal_name': 'ZZZZ', 'compu_method': 'TMPOUTS', 'min_wert': '-70', 'max_wert': '184','aufloesung': '1'}]我尝试了下面的代码,但它没有给出所需的输出:from collections import defaultdictd = defaultdict(dict)for l in (l1, l2):    for elem in l:        d[elem['compu_method']].update(elem)l3 = d.values()print(l3)代码中需要做哪些修改?
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

你创建一个字典:


d1 = { m['compu_method']: m['aufloesung'] for m in l1} 

一旦你有了它,它只是映射到新的问题:


for i, m in enumerate(l2):

    l2[i]['aufloesung'] = d1.get(m['compu_method'], None)

应该做的伎俩...


查看完整回答
反对 回复 2022-01-05
?
蝴蝶不菲

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

不使用其他模块,你可以试试这个:


for i in l2:

    for j in l1:

        if i['compu_method']==j['compu_method']:

            i['aufloesung']=j['aufloesung']

输出:


[{'signal_name': 'XXXX', 'compu_method': 'ROTACC', 'min_wert': '-500', 'max_wert': '500', 'aufloesung': '1024'}, 

{'signal_name': 'YYYY', 'compu_method': 'TMPOUTS', 'min_wert': '-70', 'max_wert': '184', 'aufloesung': '1'}, 

{'signal_name': 'ZZZZ', 'compu_method': 'TMPOUTS', 'min_wert': '-70', 'max_wert': '184', 'aufloesung': '1'}]



查看完整回答
反对 回复 2022-01-05
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

您可以先转换l1为字典:


l1_map = {x["compu_method"]: x["aufloesung"] for x in l1}

然后简单地更新l2(或重建一个新列表):


for d in l2:

    d["aufloesung"] = l1_map[d["compu_method"]]


print(l2)

# [{'signal_name': 'XXXX', 'compu_method': 'ROTACC', 'min_wert': '-500', 'max_wert': '500', 'aufloesung': '1024'}, {'signal_name': 'YYYY', 'compu_method': 'TMPOUTS', 'min_wert': '-70', 'max_wert': '184', 'aufloesung': '1'}, {'signal_name': 'ZZZZ', 'compu_method': 'TMPOUTS', 'min_wert': '-70', 'max_wert': '184', 'aufloesung': '1'}]

或者更简洁的**语法:


[{**d, "aufloesung": l1_map[d["compu_method"]]} for d in l2]

这假设"compu_method"将出现在转换后的字典中。如果您认为可能会出现KeyError,那么使用@ssm 的答案中dict.get()所示的方法会更安全。


查看完整回答
反对 回复 2022-01-05
  • 3 回答
  • 0 关注
  • 258 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号