我的示例数据:
list_of_dict =[{'cena': 23, 'nazwa': 'item1', 'param': 'pampam'},
{'cena': 26, 'nazwa': 'item2', 'param': 'iko' },
{'cena': 26, 'nazwa': 'item2a','param': 'ik2' },
{'cena': 26, 'nazwa': 'item2b','param': 'ik2' },
{'cena': 17, 'nazwa': 'item3', 'param': 'etr' },
{'cena': 17, 'nazwa': 'item4', 'param': 'asdf' }]
conditions = {'cena': 26, 'param': 'ik2' }
我试过了:
if conditions in list_of_dict:
do_something()
它可以工作,但只有当整个条件dict(每个键)匹配dict列表中的那个时,我的意思是:
In [1]: exampleSet = [{ 'type' : 'type1', 'k' : 'kval'},
...: { 'type' : 'type2', 'k' : 'kv2' },
...: { 'type' : 'type2', 'k' : 'k3' },
...: { 'type' : 'type3', 'k' : 'k3' }]
...:
...: conditions = { 'type' : 'type1', 'k' : 'kval' }
...:
...:
...: conditions in exampleSet
...:
Out[1]: True
In [2]: conditions = { 'type' : 'type1' }
In [3]: conditions in exampleSet
Out[3]: False
当我尝试将字典与指定的键值对匹配时(无论值是否/存在未指定的那些)所以
In [4]: exampleSet = [{ 'type' : 'type1', 'k' : 'kval'},
...: { 'type' : 'type2', 'k' : 'kv2' },
...: { 'type' : 'type2', 'k' : 'k3' },
...: { 'type' : 'type3', 'k' : 'k3' }]
...:
...: conditions = { 'type' : 'type2' }
...:
...: my_wanted_match( exampleSet, conditions )
必须返回:
[{ 'type' : 'type2', 'k' : 'kv2' },
{ 'type' : 'type2', 'k' : 'k3' }]
结果。
任何人都可以提供一些关于如何实现这一目标的提示吗?
答案 0 :(得分:2)
这是您想要的filter()
- 您希望根据某些条件过滤您的词典列表;仅返回符合所有条件的条目。
>>> list_of_dict =[{'cena': 23, 'nazwa': 'item1', 'param': 'pampam'},
... {'cena': 26, 'nazwa': 'item2', 'param': 'iko' },
... {'cena': 26, 'nazwa': 'item2a','param': 'ik2' },
... {'cena': 26, 'nazwa': 'item2b','param': 'ik2' },
... {'cena': 17, 'nazwa': 'item3', 'param': 'etr' },
... {'cena': 17, 'nazwa': 'item4', 'param': 'asdf' }]
设定条件:
>>> conditions = {'param':'iko'}
做一个单行过滤器:
>>> filter(lambda item: all((item[k]==v for (k,v) in conditions.iteritems())), list_of_dict)
[{'cena': 26, 'param': 'iko', 'nazwa': 'item2'}]
答案 1 :(得分:1)
这将遍历SELECT s.name, s.courseid, c.name, c.classroom, s.score, g.letter
FROM students AS s
INNER JOIN courses AS c
ON s.courseid=c.courseid
INNER JOIN gradingscheme AS g
ON CASE g.letter WHEN s.score BETWEEN g.lower AND g.upper
中的每个字典,并将具有匹配键值对的字典返回给每个条件。
list_of_dict
答案 2 :(得分:1)
使用列表理解:
>>> list_of_dict =[{'cena': 23, 'nazwa': 'item1', 'param': 'pampam'},
... {'cena': 26, 'nazwa': 'item2', 'param': 'iko' },
... {'cena': 26, 'nazwa': 'item2a','param': 'ik2' },
... {'cena': 26, 'nazwa': 'item2b','param': 'ik2' },
... {'cena': 17, 'nazwa': 'item3', 'param': 'etr' },
... {'cena': 17, 'nazwa': 'item4', 'param': 'asdf' }]
>>>
>>> conditions = {'cena': 26, 'param': 'ik2' }
>>> [d for d in list_of_dict if all((k in d and d[k] == v) for k, v in conditions.items())]
[{'cena': 26, 'param': 'ik2', 'nazwa': 'item2a'}, {'cena': 26, 'param': 'ik2', 'nazwa': 'item2b'}]
答案 3 :(得分:0)
SELECT ((COUNT(?bw_bad) AS ?total_bad)/(COUNT(?bw) AS ?total)*100) WHERE
或简单地说:
SELECT (COUNT(?bw_bad)* 100 / (COUNT(?bw)) as ?total) WHERE
答案 4 :(得分:0)
set
在这里派上用场了 * :
has_match = any(set(condition.items()) <= set(d.items()) for d in listOfDict)
或第二部分:
the_matches = [
d
for d in listOfDict
if set(condition.items()) <= set(d.items())
]
<=
是应用于集合时的子集运算符:
issubset(other)
set <= other
测试集合中的每个元素是否都在其他元素中。
* ,前提是您可以确保您的值是可清除的,即不是列表或词组