5

2 つの辞書、d1and d2、および integerが与えられた場合、またはのいずれかであるlすべてのキーを検索したいと考えています。にキーと対応する値を出力したいのですが、 にキーが含まれていない場合を除いて、0 を出力したいと思います。たとえば、kd1d2[k]<lk not in ld2d2d1

a: 1
b: 1
c: 1
d: 1

そしてd2_

a: 90
b: 89
x: 45
d: 90

l90 の場合、出力は次のようになります (順序が異なる可能性があります)。

b 89
c 0

Pythonでこれを行う最良の方法は何ですか? 私は言語を学び始めたばかりで、これまでのところ私が持っているものは次のとおりです。

for k in d1.keys():
    if k not in d2:
        print k, 0
    else:
        if d2[k]<l:
            print k, d2[k]

これはもちろん機能しますが (タイプミスがない限り)、もっと Pythonic な方法があるように思えます。

4

4 に答える 4

4

これは、defaultdict を使用して簡略化できます。defaultdict で __getitem__ を呼び出すと、「デフォルト」値が返されます。

from collections import defaultdict
d = defaultdict(int)
print d['this key does not exist'] # will print 0

変更できるもう 1 つのビットは、キーを呼び出さないことです。辞書はiterを実装しています。単純に次のように書くことが望ましいでしょう:

for k in d1:
于 2009-01-12T03:43:45.547 に答える