0

リストを繰り返し処理し、各要素を 2 つの辞書と比較しています。リスト要素は辞書のキーです。一部の要素は 2 つの辞書にあり、一部は 1 つにあり、一部はどちらにもありません。

for i in range(0,len(mylist)-1):
    if mylist[i] == mydict[mylist[i]]:
        print 'in dict 1'
    elif mylist[i] == mydict2[mylist[i]]:
        print 'in dict 2'
    else: print 'not in dictionaries'

elif私の問題は、最初のステートメントを過ぎていないことです。2 つの辞書でリスト要素が見つからない場合は、重要なエラーが出力されます。コードの別の部分にこれと非常によく似た別のループがあり、完全に機能するため、理解できません。キーが辞書にない場合は、elseステートメントを印刷します。重要なエラーではありません

4

3 に答える 3

5

問題 1 は、mgilson が言ったように、= は代入であり、== は等価であるということです。ただし、質問を編集しても、キーが辞書にあるかどうかを調べたい場合は、等号ではなく in 演算子を使用する必要があります。つまり、フォームif key in dict:. そう:

for key in mylist:
    if key in mydict1:
        print 'Key %s in dict 1' % key
    elif key in mydict2:
        print 'Key %s in dict 2' % key
    else:
        print 'Key %s not in dictionaries' % key

これをさらに抽象化して、任意のディクテーションのセットを関数で処理することもできますが、それが長期的に役立つ場合は (ただし、2 つのような少数のディクテーションの場合は、上記のハードコーディングされたチェックを使用する方がよいでしょう):

def print_keys_from_list_in_dicts(key_list, dict_list):
    indexed_dict_list = enumerate(dict_list)
    for key in key_list:
        found_in_list = []
        for index, dict in indexed_dict_list:
            if key in dict:
                found_in_list.append(index)
        print 'Key %s found in dicts %s.' % (key, found_in_list)

print_keys_from_list_in_dicts(mylist, [mydict1, mydict2])
于 2012-07-20T13:06:03.563 に答える
2

次のように辞書でキーを確認できます。

if mylist[i] in mydict:

また、10 個のアイテムのリストがある場合、range(0,len(mylist)-1)が返さ[0,1,2,3,4,5,6,7,8] れるため、リストの最後の要素はおそらく考慮されません。

于 2012-07-20T13:08:05.823 に答える
0

getメソッドを辞書に使用できます。

if mylist[i] == mydict.get(mylist[i],nonsense_value):
   ...

が指定されていない場合nonsense_valueは、デフォルトNoneで、目的には十分なナンセンスになる可能性があります。ただし、辞書の値がキーと同じかどうかをチェックするため、これはあまり意味がありません。

キーがディクショナリにあるかどうかを確認したい場合は、次のイディオムを使用する必要があります。

if mylist[i] in mydict:
   print "in dict 1"
...
于 2012-07-20T13:03:38.693 に答える