猿问

结合2个python字典列表

我有 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 defaultdict

d = defaultdict(dict)

for l in (l1, l2):

    for elem in l:

        d[elem['compu_method']].update(elem)


l3 = d.values()

print(l3)

代码中需要做哪些修改?


POPMUISE
浏览 226回答 3
3回答

德玛西亚99

你创建一个字典: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)应该做的伎俩...

蝴蝶不菲

不使用其他模块,你可以试试这个: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'}]

慕妹3146593

您可以先转换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()所示的方法会更安全。
随时随地看视频慕课网APP

相关分类

Python
我要回答