質問
これは実例で説明するのは本当に簡単なので、辞書内からリストの共通部分を削除するには、通常次のようにします:
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つのループと余分な配列を必要とするため、迷惑です。これを行うよりクリーンで効率的な方法はありますか。
解決
他のヒント
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]
所属していません StackOverflow