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