[英]Remove dict from list of dict if key and value doesnt match with other dict
我有一個字典列表,我想用其他字典中的值過濾它。
orig_list = [{"name":"Peter","last_name":"Wick","mail":"Peter@mail.com","number":"111"},
{"name":"John","last_name":"Hen","mail":"John@mail.com","number":"222"},
{"name":"Jack","last_name":"Malm","mail":"Jack@mail.com","number":"542"},
{"name":"Anna","last_name":"Hedge","mail":"Anna@mail.com"},
{"name":"Peter","last_name":"Roesner","mail":"Peter2@mail.com","number":"445"},
{"name":"Tino","last_name":"Tes","mail":"Tino@mail.com","number":"985"},]
預期結果示例1:
filter = {"name":"Peter"}
orig_list[{"name":"Peter","last_name":"Wick","mail":"Peter@mail.com","number":"111"},
{"name":"Peter","last_name":"Roesner","mail":"Peter2@mail.com","number":"445"}]
預期結果示例2:
filter = {"name":"Peter","number":"445"}
orig_list[
{"name":"Peter","last_name":"Roesner","mail":"Peter2@mail.com","number":"445"}]
篩選器可以具有多個鍵。 可能的鍵是(name,last_name,number)。 基本上,我想要的是瀏覽字典列表,並檢查每個字典是否該字典包含給定過濾器中的鍵,如果包含,則檢查鍵值是否匹配。 如果他們不這樣做,請從字典列表中刪除整個字典。
最終列表不必是orig_list。 它可以是一個新列表。 因此,從orig_list中刪除字典不是強制性的。 字典也可以復制到新的字典列表中。
您可以使用列表理解:
orig_list = [{"name":"Peter","last_name":"Wick","mail":"Peter@mail.com","number":"111"},
{"name":"John","last_name":"Hen","mail":"John@mail.com","number":"222"},
{"name":"Jack","last_name":"Malm","mail":"Jack@mail.com","number":"542"},
{"name":"Anna","last_name":"Hedge","mail":"Anna@mail.com"},
{"name":"Peter","last_name":"Roesner","mail":"Peter2@mail.com","number":"445"},
{"name":"Tino","last_name":"Tes","mail":"Tino@mail.com","number":"985"},]
filter_by = {"name":"Peter"}
result = [dic for dic in orig_list if all(key in dic and dic[key] == val for key, val in filter_by.items())]
print(result)
輸出:
[
{
"name": "Peter",
"last_name": "Wick",
"mail": "Peter@mail.com",
"number": "111"
},
{
"name": "Peter",
"last_name": "Roesner",
"mail": "Peter2@mail.com",
"number": "445"
}
]
對於filter_by = {"name":"Peter","number":"445"}
您將獲得:
[
{
"name": "Peter",
"last_name": "Roesner",
"mail": "Peter2@mail.com",
"number": "445"
}
]
如果確定所有字典詞典的鍵都存在於其他字典中,則可以這樣編寫搜索(換句話說,缺少的鍵將被認為是匹配的):
filterDict = {"name":"Peter"}
result = [ d for d in orig_list if {**d,**filterDict} == d ]
如果缺少的鍵不匹配,則可以執行以下操作:
result = [d for d in orig_list if {*filterDict.items()}<={*d.items()}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.