Python列出的词典:
_list_ = [{'key1': 'value1', 'key2': 'value2'}, {'key1': 'value3', 'key2': 'value4'}]
example_search_str1 = 'e1' # for value1 of key1
example_search_str2 = 'e3' # for value3 of key1
我想删除包含多个示例搜索字符串的列出词典。怎么做到这一点?现有的答案并没有多大帮助。 Python新手在这里。
答案 0 :(得分:0)
您的问题有点不清楚,但据我了解,您希望从列表中删除词典,如果他们的' key1' value是一些字符串之一。
bad_strings = ['e1', 'e3']
new_list = [d for d in old_list if d['key1'] not in bad_strings]
编辑:
哦,我明白了。我很接近。你想看看' key1' value包含禁用的字符串。也是可行的。
new_list = [d for d in old_list if not any(bad in d['key1'] for bad in bad_strings)]
答案 1 :(得分:0)
另外,对于匹配(key,unwanted_value),我可能会尝试像:
list_of_dicts = [{'key1': 'value1', 'key2': 'value2'}, {'key1': 'value3', 'key2': 'value4'}]
bad_keys_vals = [('key1', 'value1'), ('key2', 'value2')]
def filter_dict_list(list_of_dicts, bad_keys_vals):
return list(filter(lambda d: any((d[key] != bad_val for key, bad_val in bad_keys_vals)), list_of_dicts))
print(filter_dict_list(list_of_dicts, bad_keys_vals))
>> [{'key2': 'value4', 'key1': 'value3'}]
但是,是的,这会导致创建一个新列表,因此您可能需要重新填充旧列表。