首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按值过滤字典

按值过滤字典
EN

Stack Overflow用户
提问于 2013-11-21 20:07:49
回答 4查看 77关注 0票数 1

我有一个字典列表,如果两个键的值中有两个有一个已定义的字符串,我想对其进行筛选。

例如,下面列表中的过滤器(A=BBB和D=EEE) .

代码语言:javascript
运行
复制
[{A:BBB, C:DDD, D:EEE,...}, {A:BBB, C:DDD, D:ESS,...},{A:BBB, C:ASD, D:EEE,...},{C:ASD, D:EEE,...},...]

会输出

代码语言:javascript
运行
复制
[{A:BBB, C:DDD, D:EEE,...},{A:BBB, C:ASD, D:EEE,...},...]

任何帮助都将不胜感激!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-21 20:15:08

试试看,这是一个使用列表理解的单行信息:

代码语言:javascript
运行
复制
# input data
lst = [{'A':'BBB', 'C':'DDD', 'D':'EEE'},
       {'A':'BBB', 'C':'DDD', 'D':'ESS'},
       {'A':'BBB', 'C':'ASD', 'D':'EEE'},
       {'C':'ASD', 'D':'EEE'}]

# list of filters
flt = [('A', 'BBB'), ('D', 'EEE')]

# a list comprehension + all() will do the trick
[x for x in lst if all(x.get(k, None) == v for k, v in flt)]
=> [{'A': 'BBB', 'C': 'DDD', 'D': 'EEE'}, {'A': 'BBB', 'C': 'ASD', 'D': 'EEE'}]

这种方法的好处是,您可以在筛选器中声明尽可能多的键/值对,无论如何,它都能工作。

票数 4
EN

Stack Overflow用户

发布于 2013-11-21 20:10:23

代码语言:javascript
运行
复制
result = []
for i in lst:
    if i['A'] == "BBB" and i['D'] == "EEE":
        result.append(i)
票数 0
EN

Stack Overflow用户

发布于 2013-11-21 20:19:09

代码语言:javascript
运行
复制
l = [{'A': 'BBB', 'C': 'DDD', 'D': 'EEE'}, {'A': 'BBB', 'C': 'DDD', 'D': 'ESS'},
    {'A': 'BBB', 'C': 'ASD', 'D': 'EEE'}, {'C': 'ASD', 'D': 'EEE'}]
filterd = {'D': 'EEE', 'A': 'BBB'}                                         
[x for x in l if x.viewvalues() >= filterd.viewvalues()]                   
[{'A': 'BBB', 'C': 'DDD', 'D': 'EEE'}, {'A': 'BBB', 'C': 'ASD', 'D': 'EEE'}] 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20130885

复制
相关文章

相似问题

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