[英]Find and remove the dict from one of two lists of dicts if there is a key-value pair not present in at least one of the lists
經過某些操作后,我得到了兩個字典列表,這些字典按numeric_id鍵排序。 假設我有
list1 = [
{'ref': 'link1', 'numeric_id': 1},
{'ref': 'link2', 'numeric_id': 2},
{'ref': 'link3', 'numeric_id': 3},
{'ref': 'link4', 'numeric_id': 4},
{'ref': 'link5', 'numeric_id': 5}
]
list2 = [
{'ref': 'different_link1', 'numeric_id': 1},
{'ref': 'different_link2', 'numeric_id': 2},
{'ref': 'different_link4', 'numeric_id': 4},
{'ref': 'different_link5', 'numeric_id': 5}
]
並且在第二個列表中,“ numeric_id”鍵中的值3不存在,而第一個列表中包含此類鍵值對。 然后,我必須從列表1中刪除該詞典,因為我只需要在兩個列表中都具有基於numeric_id的匹配對。 當第一個列表中不存在該值而第二個列表中存在該值時,情況也可能相反。 我不知道會是什么情況。
結果應該是兩個沒有任何未配對元素的列表。 由於列表包含具有不同鏈接的字典,因此它們之間的唯一連接是numeric_id鍵的值
任務似乎很容易,但是我已經很迷路了。 能否請你幫忙? 找到了很多類似的問題,但找不到適合我的情況的正確解決方案。
提前致謝!
您可以使用filter
:
list1 = [{'numeric_id': 1, 'ref': 'link1'}, {'numeric_id': 2, 'ref': 'link2'}, {'numeric_id': 3, 'ref': 'link3'}, {'numeric_id': 4, 'ref': 'link4'}, {'numeric_id': 5, 'ref': 'link5'}]
list2 = [{'numeric_id': 1, 'ref': 'link1'}, {'numeric_id': 2, 'ref': 'link2'}, {'numeric_id': 4, 'ref': 'link4'}, {'numeric_id': 5, 'ref': 'link5'}]
new_list1 = list(filter(lambda x:any(c['numeric_id'] == x['numeric_id'] for c in list2), list1))
new_list2 = list(filter(lambda x:any(c['numeric_id'] == x['numeric_id'] for c in list1), list2))
輸出:
[{'numeric_id': 1, 'ref': 'link1'}, {'numeric_id': 2, 'ref': 'link2'}, {'numeric_id': 4, 'ref': 'link4'}, {'numeric_id': 5, 'ref': 'link5'}]
[{'numeric_id': 1, 'ref': 'link1'}, {'numeric_id': 2, 'ref': 'link2'}, {'numeric_id': 4, 'ref': 'link4'}, {'numeric_id': 5, 'ref': 'link5'}]
也許你可以試試這個:
1.從list2
提取numeric_id
2.如果list1
的numeric_id
在list2
則追加list1
每個元素
list2_numeric_id = [element["numeric_id"] for element in list2]
[element for element in list1 if element["numeric_id"] in list2_numeric_id]
>> [{'numeric_id': 1, 'ref': 'link1'}, {'numeric_id': 2, 'ref': 'link2'}, {'numeric_id': 4, 'ref': 'link4'}, {'numeric_id': 5, 'ref': 'link5'}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.