簡體   English   中英

如果字典包含禁止值,則從列表中刪除字典

[英]Remove dictionary from list if it contains forbidden value

我有一個字典列表:

my_dicts = [
  {'name': 'aaa',
  'codename': 'bbbb',
  'type': 'cccc',
  'website': 'url1'},
  {'name': 'aaa2',
  'codename': 'bbbb2',
  'type': 'cccc2',
  'product_url': 'url2'},
  {'name': 'aaa2',
  'codename': 'bbbb2',
  'type': 'cccc2',
  'dop_url': 'url3'}
 ]

和一個清單:

my_list = ['url1', 'url3']

我的目標是擁有這個 output:

my_dicts = [
  {'name': 'aaa2',
  'codename': 'bbbb2',
  'type': 'cccc2',
  'product_url': 'url2'}
 ]

我想找到最有效的方法來刪除列表中所述字典的任何值的字典。

我試過了,但出現以下錯誤: RuntimeError: dictionary changed size during iteration

for url in my_list:
        for e in my_dicts:
            for key, value in e.items():
                if value == url:
                    del e[key]

您可以將列表理解與all()一起使用,僅保留沒有鍵值對且值出現在my_list中的字典:

[item for item in my_dict if all(url not in item.values() for url in my_list)]

這輸出:

[{'name': 'aaa2', 'codename': 'bbbb2', 'type': 'cccc2', 'product_url': 'url2'}]

一種方法是使用一個外循環來遍歷列表my_dicts中的每個元素,並使用一個內循環來遍歷給定字典的每個元素。 對於外循環的給定迭代,如果字典中的值之一包含在my_list中,我們將字典的索引存儲在indices列表中的my_dicts中。 在完成對my_dicts的掃描后,使用索引我們知道要刪除my_dicts的哪些元素。

indices = []
# locate dicts with a value that is in my_list
for index, elem in enumerate(my_dicts):
    for key in elem:
        if elem[key] in my_list:
            indices.append(index)
            break 
# remove dicts 
for i in reversed(indices):
    my_dicts.pop(i)

print(my_dicts)

Output

[{'name': 'aaa2', 'codename': 'bbbb2', 'type': 'cccc2', 'product_url': 'url2'}]

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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