如果字典包含禁止值,则从列表中删除字典
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']
我的目标是得到这个输出:
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()
一起使用,仅保留没有 key-value 对且值出现在 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
中,我们将字典的索引存储在 my_dicts
中的 indices
列表中。完成对 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)
输出
[{'name': 'aaa2', 'codename': 'bbbb2', 'type': 'cccc2', 'product_url': 'url2'}]
希望对您有所帮助!
我有一个词典列表:
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']
我的目标是得到这个输出:
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()
一起使用,仅保留没有 key-value 对且值出现在 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
中,我们将字典的索引存储在 my_dicts
中的 indices
列表中。完成对 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)
输出
[{'name': 'aaa2', 'codename': 'bbbb2', 'type': 'cccc2', 'product_url': 'url2'}]
希望对您有所帮助!