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つのキーでリストを検索する必要があります。「if」条件を検証するにはどうすればよいですか?

4

4 に答える 4

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
于 2012-11-14T14:30:56.100 に答える
3
if not any(d['attr1'] == val1 and d['attr2'] == val2 for d in l):

に等しいおよびに等しいdictdが listlにないかどうかをテストします。attr1val1attr2val2

利点は、一致が見つかるとすぐに反復を停止することです。

于 2012-11-14T14:30:21.347 に答える
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 に答える
0
if {"class":class, "parameter":parameter} not in [{'class':d['class'], 'parameter':d['parameter']} for d in l]:

条件がチェックされるたびにリストを計算したくない場合は、ループの外で計算してください。

于 2012-11-14T14:30:00.527 に答える