0

我有一个字典列表(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 个键在列表中搜索。我如何验证“如果”条件?

4

4 回答 4

5

如果我理解正确,您的问题是确定是否已经有一个具有给定值的条目classand 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
于 2012-11-14T14:30:56.100 回答
3
if not any(d['attr1'] == val1 and d['attr2'] == val2 for d in l):

d测试list 中是否没有 dictlattr1equal toval1attr2equal to val2

优点是一旦找到匹配就停止迭代。

于 2012-11-14T14:30:21.347 回答
0
if {"class":class, "parameter":parameter} not in [{'class':d['class'], 'parameter':d['parameter']} for d in l]:

您可能不想在每次检查条件时都计算列表,请在循环之外执行此操作。

于 2012-11-14T14:30:00.527 回答
0

我认为通过设置比较,您可以摆脱它:

>>> d1 = {"id": 1, "class": 3, "parameter": 4}
>>> d2 = {"id": 1, "class": 3}
>>> set(d2.items()) < set(d1.items())
True
>>> 
于 2012-11-14T14:32:51.927 回答