簡體   English   中英

如果鍵和值與其他字典不匹配,則從字典列表中刪除字典

[英]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.

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