Python从列表中删除字典

时间:2016-09-29 17:42:50

标签: python list dictionary

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新手在这里。

2 个答案:

答案 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'}]

但是,是的,这会导致创建一个新列表,因此您可能需要重新填充旧列表。