结合2个字典的python列表

Anu*_*ani 0 python arrays dictionary list

我有2条字典的python列表。第一个python列表如下所示:

l1=  [{'compu_method': 'ROTACC', 'aufloesung': '1024'}, 
{'compu_method': 'TMPOUTS', 'aufloesung': '1'}]
Run Code Online (Sandbox Code Playgroud)

第二个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'}]
Run Code Online (Sandbox Code Playgroud)

这两个列表都具有compu_method公用的。我想要从 第二个列表中存在的所有compu_method的第一个列表中获取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'}]
Run Code Online (Sandbox Code Playgroud)

我尝试了下面的代码,但没有给出所需的输出:

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)
Run Code Online (Sandbox Code Playgroud)

代码需要什么修改?

ssm*_*ssm 5

您创建一个字典:

d1 = { m['compu_method']: m['aufloesung'] for m in l1} 
Run Code Online (Sandbox Code Playgroud)

一旦有了,只需映射到新的对象即可:

for i, m in enumerate(l2):
    l2[i]['aufloesung'] = d1.get(m['compu_method'], None)
Run Code Online (Sandbox Code Playgroud)

应该做的把戏...