我有一个字典列表,如果两个键的值中有两个有一个已定义的字符串,我想对其进行筛选。
例如,下面列表中的过滤器(A=BBB和D=EEE) .
[{A:BBB, C:DDD, D:EEE,...}, {A:BBB, C:DDD, D:ESS,...},{A:BBB, C:ASD, D:EEE,...},{C:ASD, D:EEE,...},...]会输出
[{A:BBB, C:DDD, D:EEE,...},{A:BBB, C:ASD, D:EEE,...},...]任何帮助都将不胜感激!
发布于 2013-11-21 20:15:08
试试看,这是一个使用列表理解的单行信息:
# 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'}]这种方法的好处是,您可以在筛选器中声明尽可能多的键/值对,无论如何,它都能工作。
发布于 2013-11-21 20:10:23
result = []
for i in lst:
if i['A'] == "BBB" and i['D'] == "EEE":
result.append(i)发布于 2013-11-21 20:19:09
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'}] https://stackoverflow.com/questions/20130885
复制相似问题