簡體   English   中英

如果在至少一個列表中不存在鍵值對,則從兩個字典列表之一中查找並刪除該字典

[英]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.如果list1numeric_idlist2則追加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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM