Python one liner来合并具有共同值的字典

Van*_*ith -1 python list-comprehension python-3.x

我拥有的:

a=[{'name':'a','vals':1,'required':'yes'},{'name':'b','vals':2},{'name':'d','vals':3}]
b=[{'name':'a','type':'car'},{'name':'b','type':'bike'},{'name':'c','type':'van'}] 
Run Code Online (Sandbox Code Playgroud)

我试过的:

[[i]+[j] for i in b for j in a if i['name']==j['name']]
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

[[{'name': 'a', 'type': 'car'}, {'name': 'a', 'vals': 1}], [{'name': 'b', 'type': 'bike'}, {'name': 'b', 'vals': 2}]]
Run Code Online (Sandbox Code Playgroud)

我想要的是:

[{'name': 'a', 'type': 'car','vals': 1},{'name': 'b', 'type': 'bike','vals': 2}]
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 我需要将字典合并为一个字典。
  2. 它应该只合并那些在 a 和 b 中都有共同“名称”的人。
  3. 我想要 python one liner 的答案。

小智 5

对于 Python 3,您可以这样做:

a=[{'name':'a','vals':1},{'name':'b','vals':2},{'name':'d','vals':3}]
b=[{'name':'a','type':'car'},{'name':'b','type':'bike'},{'name':'c','type':'van'}]

print([{**i,**j} for i in b for j in a if i['name']==j['name']])
Run Code Online (Sandbox Code Playgroud)