首页 > 解决方案 > 从主列表和子列表创建一个新的字典列表

问题描述

我有两个列表(主列表和子列表),其中包含不同数量的字典,如果它们的位置匹配,它们的值将相同。

mainLst = [{"name":"M_AAA_X", "position":"1", "value":"8"}, 
           {"name":"M_AAA_X", "position":"2", "value":"10"}, 
           {"name":"M_AAA_X", "position":"4", "value":"14"}, 
           {"name":"M_AAA_X", "position":"5", "value":"16"},
           {"name":"M_AAA_X", "position":"7", "value":"20"}]
subLst = [{"name":"S_AAA_X", "position":"1", "value":"8"}, 
          {"name":"S_AAA_X", "position":"2", "value":"10"}, 
          {"name":"S_AAA_X", "position":"3", "value":"12"}, 
          {"name":"S_AAA_X", "position":"4", "value":"14"}, 
          {"name":"S_AAA_X", "position":"5", "value":"16"},
          {"name":"S_AAA_X", "position":"6", "value":"18"}]

我想通过以下方式创建一个新列表:

  1. 从 mainLst 中获取元素
  2. 如果 mainLst 缺少某个位置(例如位置:3、6),则从 subList 中获取元素
  3. 按“位置”升序排序

输出应如下所示:

newLst = [{"name":"M_AAA_X", "position":"1", "value":"8"}, 
          {"name":"M_AAA_X", "position":"2", "value":"10"}, 
          {"name":"S_AAA_X", "position":"3", "value":"12"},
          {"name":"M_AAA_X", "position":"4", "value":"14"}, 
          {"name":"M_AAA_X", "position":"5", "value":"16"},
          {"name":"S_AAA_X", "position":"6", "value":"18"},
          {"name":"M_AAA_X", "position":"7", "value":"20"}]

谁能帮我完成这个?提前致谢!

标签: pythonlistdictionary

解决方案


试试这个。

mainLst.extend([dictSub for dictSub in subLst if dictSub['position'] not in [pos['position'] for pos in mainLst]])
print(sorted(mainLst, key = lambda i: i['position']))

基本上我们收集sublist不在的位置mainlist。然后我们根据它对字典列表进行排序。

输出

[{'name': 'M_AAA_X', 'position': '1', 'value': '8'}, 
 {'name': 'M_AAA_X', 'position': '2', 'value': '10'}, 
 {'name': 'S_AAA_X', 'position': '3', 'value': '12'}, 
 {'name': 'M_AAA_X', 'position': '4', 'value': '14'}, 
 {'name': 'M_AAA_X', 'position': '5', 'value': '16'}, 
 {'name': 'S_AAA_X', 'position': '6', 'value': '18'}, 
 {'name': 'M_AAA_X', 'position': '7', 'value': '20'}]

推荐阅读