[英]Create a new list of dictionaries from a main list and a sublist
我有兩個列表(主列表和子列表)包含不同數量的字典,如果它們的位置匹配,它們的值將相同。
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"}]
我想通過以下方式創建一個新列表:
output 應如下所示:
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']))
基本上我們收集不在主sublist
中的子列表中的mainlist
。 然后我們根據它對字典列表進行排序。
output
[{'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'}]
另一個解決方案,使用itertools.groupby
:
from itertools import groupby
out = []
for _, g in groupby(
sorted(mainLst + subLst, key=lambda k: int(k["position"])),
lambda k: int(k["position"]),
):
out.append(next(g))
print(out)
印刷:
[{'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"}]
我想通過以下方式創建一個新列表:
output 應如下所示:
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"}]
誰能幫我完成這個? 提前致謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.