我有一个列表(l)的词典{"id": id, "class": class, "parameter": parameter}
。我必须这样做,
for each value of class:
parameter = getParameter(class) //we can get different parameter for same class
if {"class":class, "parameter":parameter} not in l:
increment id and do l.append({"id": id, "class": class, "parameter": parameter})
这里列表中的dict有3个键,因为我必须在列表中搜索2个键。我如何验证'if'条件?
答案 0 :(得分:5)
如果我理解正确,您的问题是决定是否已存在具有class
和parameter
的给定值的条目?您必须编写一个表达式来搜索列表,如下所示:
def search_list(thedict, thelist):
return any(x["class"] == thedict["class"]
and x["parameter"] == thedict["parameter"]
for x in thelist)
如果找到条目,则该函数返回True。这样称呼:
if not search_list({"class": class, "parameter": parameter}, l):
#the item was not found - do stuff
答案 1 :(得分:3)
if not any(d['attr1'] == val1 and d['attr2'] == val2 for d in l):
测试列表d
中的词典l
是否attr1
等于val1
且attr2
等于val2
。< / p>
优势在于它会在找到匹配后立即停止迭代。
答案 2 :(得分:0)
if {"class":class, "parameter":parameter} not in [{'class':d['class'], 'parameter':d['parameter']} for d in l]:
每次检查条件时,您可能都不想计算列表,在循环外执行此操作。
答案 3 :(得分:0)
我认为通过设置比较,你可以摆脱它:
>>> d1 = {"id": 1, "class": 3, "parameter": 4}
>>> d2 = {"id": 1, "class": 3}
>>> set(d2.items()) < set(d1.items())
True
>>>