字典集合值过滤:基于指定列表筛选字典内集合元素
解决字典集合元素筛选的问题
先帮你理清楚问题:你想基于列表s_list = ['blue','white']筛选字典dict_set里的集合元素,要求保留空集合,只对非空集合做过滤,但你写的代码返回了全空的结果,这是因为代码里的变量和判断逻辑搞反啦。
你的代码问题分析
你写的这段代码:
for a,b in dict_set.items(): dict_set[a] = set([x for x in a if b in s_list])
这里有两个关键错误:
- 遍历对象错了:你应该遍历集合
b里的元素,而不是字典的键a - 判断条件错了:应该判断元素
x是否在s_list里,而不是判断整个集合b是否在s_list里(集合b本身肯定不在字符串列表里)
正确的实现代码
我们只需要修正这两个错误,同时保留空集合的逻辑(因为空集合遍历后还是空,不用额外处理):
s_list = ['blue','white'] dict_set = {'A':{'red','orange','blue','white'},'B':set(),'C':{'white','green','yellow','blue'},'D':set(),'E':set()} for key, current_set in dict_set.items(): # 对每个集合,筛选出在s_list里的元素,空集合处理后还是空 dict_set[key] = {x for x in current_set if x in s_list} print(dict_set)
运行这段代码后,输出就是你期望的:
{'A': {'blue', 'white'}, 'B': set(), 'C': {'blue', 'white'}, 'D': set(), 'E': set()}
另外,这里用集合推导式{x for x in current_set if x in s_list}比列表推导式转集合更高效,当然用列表推导式set([x for x in ...])也能得到正确结果,只是集合推导式更贴合场景。
内容的提问来源于stack exchange,提问作者Poskaz
相关产品推荐
相关产品推荐

