Skip to main content
 首页 » 编程设计

python之使用多个键合并 python 字典列表

2025年05月04日15Free-Thinker

我想使用多个键合并两个字典列表。

我有一个包含一组结果的字典列表:

l1 = [{'id': 1, 'year': '2017', 'resultA': 2}, 
      {'id': 2, 'year': '2017', 'resultA': 3}, 
      {'id': 1, 'year': '2018', 'resultA': 3}, 
      {'id': 2, 'year': '2018', 'resultA': 5}] 

还有另一组结果的另一个字典列表:

l2 = [{'id': 1, 'year': '2017', 'resultB': 5}, 
      {'id': 2, 'year': '2017', 'resultB': 8}, 
      {'id': 1, 'year': '2018', 'resultB': 7}, 
      {'id': 2, 'year': '2018', 'resultB': 9}] 

我想使用“id”和“year”键组合它们以获得以下内容:

all = [{'id': 1, 'year': '2017', 'resultA': 2, 'resultB': 5}, 
       {'id': 2, 'year': '2017', 'resultA': 3, 'resultB': 8}, 
       {'id': 1, 'year': '2018', 'resultA': 3, 'resultB': 7}, 
       {'id': 2, 'year': '2018', 'resultA': 5, 'resultB': 9}] 

我知道要在一个键上组合两个字典列表,我可以使用这个:

l1 = {d['id']:d for d in l1}  
 
all = [dict(d, **l1.get(d['id'], {})) for d in l2]   

但它忽略了年份,提供了以下不正确的结果:

all = [{'id': 1, 'year': '2018', 'resultA': 3, 'resultB': 5}, 
       {'id': 2, 'year': '2018', 'resultA': 5, 'resultB': 8}, 
       {'id': 1, 'year': '2018', 'resultA': 3, 'resultB': 7}, 
       {'id': 2, 'year': '2018', 'resultA': 5, 'resultB': 9}] 

像在 R 中一样处理它,通过添加我要合并的第二个变量,我得到一个 KeyError:

l1 = {d['id','year']:d for d in l1}  
 
all = [dict(d, **l1.get(d['id','year'], {})) for d in l2]    

如何使用多个键进行合并?

请您参考如下方法:

代替 d['id','year'],使用元组 (d['id'], d['year']) 作为你的键。