我是 python 新手。在 Python 中,我想比較兩個字典串列
下面是我要比較的兩個字典串列,鍵是“zrepcode”,id是數字“1”、“3”和“4”...
代碼片段如下:
串列
1 = [{"3":[{"period":"P13","value":10,"year":2022}],"zrepcode":"55"},{"1":[{"period":"P10","value":5,"year":2023}],"zrepcode":"55"}]
List2 = [{"1":[{"period":"P1","value":10,"year":2023},{"period":"P2","value":5,"year":2023}],"zrepcode":"55"},{"3":[{"period":"P1","value":4,"year":2023},{"period":"P2","value":7,"year":2023}],"zrepcode":"55"},{"4":[{"period":"P1","value":10,"year":2023}],"zrepcode":"55"}]
比較之后,我們需要來自 list2 的唯一字典串列。
res = [{"4":[{"period":"P1","value":10,"year":2023}],"zrepcode":"55"}]
這是預期的輸出,現在我不知道我是如何得到這個的。
uj5u.com熱心網友回復:
這是我的解決方案:
list_1 = [
{"3":[{"period":"P13","value":10,"year":2022}],"zrepcode":"55"},
{"1":[{"period":"P10","value":5,"year":2023}],"zrepcode":"55"}
]
list_2 = [
{"1":[{"period":"P1","value":10,"year":2023},{"period":"P2","value":5,"year":2023}],"zrepcode":"55"},
{"3":[{"period":"P1","value":4,"year":2023},{"period":"P2","value":7,"year":2023}],"zrepcode":"55"},
{"4":[{"period":"P1","value":10,"year":2023}],"zrepcode":"55"}]
list_1_keys = [sorted(element.keys())[0] for element in list_1]
res = [element for element in list_2 if sorted(element.keys())[0] not in list_1_keys]
我認為您不需要對密鑰進行任何檢查,zrepcode因為這始終是相同的。
如果您需要有關解決方案的更多解釋/詳細資訊,請告訴我。
我希望它會幫助你。
編輯
如果我們考慮到zrepcode
list_1_couple = []
for element in list_1:
keys = sorted(element.keys())
list_1_couple.append([keys[0], element[keys[1]]])
res = []
for element in list_2:
keys = sorted(element.keys())
if [keys[0], element[keys[1]]] not in list_1_couple:
res.append(element)
print(res)
您可能可以清理一下代碼,但至少它應該可以作業??
編輯 2
如果您更喜歡使用單線
list_1_couple = [[sorted(element.keys())[0], element[sorted(element.keys())[1]]] for element in list_1 ]
res = [element for element in list_2 if [sorted(element.keys())[0], element[sorted(element.keys())[1]]] not in list_1_couple]
也會成功的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/496874.html
標籤:Python python-3.x 列表 排序 字典
下一篇:在字典中填充層次結構
