在词典的python列表中搜索

时间:2012-11-14 14:23:19

标签: python

我有一个列表(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'条件?

4 个答案:

答案 0 :(得分:5)

如果我理解正确,您的问题是决定是否已存在具有classparameter的给定值的条目?您必须编写一个表达式来搜索列表,如下所示:

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等于val1attr2等于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
>>>