首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >过滤/排除字典中的值列表(Python 3)

过滤/排除字典中的值列表(Python 3)
EN

Stack Overflow用户
提问于 2018-06-09 03:35:45
回答 1查看 682关注 0票数 1

用下面的判断法:

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']}}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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()}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50767359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档