Python 从主列表和子列表创建新的词典列表

Python 从主列表和子列表创建新的词典列表,python,list,dictionary,Python,List,Dictionary,我有两个列表(主列表和子列表),其中包含不同数量的字典,如果它们的位置匹配,它们的值将是相同的 mainLst = [{"name":"M_AAA_X", "position":"1", "value":"8"}, {"name":"M_AAA_X", "position":"2&qu

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

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"}]
我想通过以下方式创建一个新列表:

  • 从mainLst获取元素
  • 如果mainLst缺少某个位置(例如位置:3,6),则从子列表中获取元素
  • 按“位置”升序排序
  • 输出应如下所示:

    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"}]
    
    谁能帮我完成这个任务?提前谢谢

    试试这个

    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']))
    
    基本上,我们在
    子列表
    中收集位置,该子列表不在
    主列表
    中。然后我们根据这一点对目录列表进行排序

    输出

    [{'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'}]
    
    试试这个

    
    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"}]
              
    test_list=[]
    test_list2=[]
    for j in mainLst:
        print(j.get("position"))
        test_list.append(j.get("position"))
    for k in subLst:
        print(k.get("position"))
        test_list2.append(k.get("position"))
    for l in test_list:
        if l in test_list2:
            print("True")
        else:
            test_list2.append(l)
    newlst=[]
    spe_list=[]
    print(test_list2)
    for i in test_list2:
        for j in mainLst:
            if j.get("position")==i:
                spe_list.append(j.get("position"))
                newlst.append(j)
                break
            else:
                pass
        for k in subLst:
            if k.get("position")==i:
                if k.get("position") in spe_list:
                    pass
                else:
                    newlst.append(k)
                    break
            else:
                pass
    
    
    for j in newlst:
        print(j)
    
    
    
    
    

    另一种解决方案是使用
    itertools.groupby

    从itertools导入groupby
    out=[]
    对于groupby中的g(
    已排序(mainLst+subLst,key=lambda k:int(k[“位置])),
    lambda k:int(k[“位置]),
    ):
    out.append(下一个(g))
    打印(输出)
    
    印刷品:

    [{'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'}]
    
    你已经试过什么了吗?这是一个非常有趣的列表<代码>用于然后是
    如果
    然后是
    用于
    。从未见过这样的事情,但我真的很喜欢这个解决方案。也许对于初学英语的人来说可能很难理解,因为只有代码的答案很少有用。
    
    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"}]
              
    test_list=[]
    test_list2=[]
    for j in mainLst:
        print(j.get("position"))
        test_list.append(j.get("position"))
    for k in subLst:
        print(k.get("position"))
        test_list2.append(k.get("position"))
    for l in test_list:
        if l in test_list2:
            print("True")
        else:
            test_list2.append(l)
    newlst=[]
    spe_list=[]
    print(test_list2)
    for i in test_list2:
        for j in mainLst:
            if j.get("position")==i:
                spe_list.append(j.get("position"))
                newlst.append(j)
                break
            else:
                pass
        for k in subLst:
            if k.get("position")==i:
                if k.get("position") in spe_list:
                    pass
                else:
                    newlst.append(k)
                    break
            else:
                pass
    
    
    for j in newlst:
        print(j)