用下面的判断法:
dict_filter_test = {'name_one_key': {'name_one_value': ['random_one',
'random_two',
'random_three',
'random_four',
'random_five',
'random_six']},
'name_two_key': {'name_two_value': ['random_one',
'random_two',
'random_three',
'random_four',
'random_five',
'random_six']}}
我正在尝试排除包含以下内容的字符串:
filter = set(['six', 'two'])
这就是我到目前为止所知道的:
def filtered_dict():
for key, value in dict_filter_test.items():
for value, name in value.items():
list = [string for string in name
if not any(word in string for word in filter)]
print (list)
return dict_filter_test
以下是我正在尝试获取的输出:
{'name_one_key': {'name_one_value': ['random_one',
'random_three',
'random_four',
'random_five']},
'name_two_key': {'name_two_value': ['random_one',
'random_three',
'random_four',
'random_five']}}
发布于 2018-06-09 03:41:22
您必须重新分配过滤列表的结果,重用相同的引用,否则更改将丢失。
为此,对值的值进行循环(不需要键)。对于每个列表,使用列表理解重新构建一个新的过滤列表,并使用切片表示法重新分配结果(以保持相同的引用)
filt = ['six', 'two'] # you don't need a set here
for v in dict_filter_test.values():
for v2 in v.values():
v2[:] = [x for x in v2 if all(f not in x for f in filt)]
结果:
{'name_two_key': {'name_two_value': ['random_one', 'random_three', 'random_four', 'random_five']},
'name_one_key': {'name_one_value': ['random_one', 'random_three', 'random_four', 'random_five']
}}
如果您希望使用嵌套字典理解完全重新构建字典,请执行以下操作:
dict_filter_test = { k:{k2:[x for x in v2 if all(f not in x for f in filt)] for k2,v2 in v.items()} for k,v in dict_filter_test.items()}
https://stackoverflow.com/questions/50767359
复制相似问题