質問

これは実例で説明するのは本当に簡単なので、辞書内からリストの共通部分を削除するには、通常次のようにします:

a = {1:'', 2:'', 3:'', 4:''}
exclusion = [3, 4, 5]

# have to build up a new list or the iteration breaks
toRemove = []
for var in a.iterkeys():
    if var in exclusion:
        toRemove.append(var)

for var in toRemove:
    del a[var]

これは珍しい例のように思えるかもしれませんが、このようなことをしなければならなかった回数は驚くべきことです。セットでこれを行う方がはるかに良いでしょうが、私は明らかに辞書の「値」を保持したいです。

このメソッドは2つのループと余分な配列を必要とするため、迷惑です。これを行うよりクリーンで効率的な方法はありますか。

役に立ちましたか?

解決

検討 dict.pop

for key in exclusion:
     a.pop(key, None)

key がキーでない場合、 None は例外が発生しないようにします。

他のヒント

a = dict((key,value) for (key,value) in a.iteritems() if key not in exclusion)

iterkeys の代わりに、単に keys メソッドを使用しないのはなぜですか?そうすれば、反復子ではなくリストを返すため、1つのループで実行できます。

除外リストをセットに変更し、交差を使用して重複を取得できます。

exclusion = set([3, 4, 5])

for key in exclusion.intersection(a):
    del a[key]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top