6

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

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]

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

この方法は、2つのループと追加の配列を必要とするため面倒です。これを行うためのよりクリーンで効率的な方法はありますか?

4

4 に答える 4

14

dict.popを検討してください:

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

キーでない場合にNonepopが例外を発生keyさせないようにします。

于 2008-10-03T14:28:29.043 に答える
3
a = dict((key,value) for (key,value) in a.iteritems() if key not in exclusion)
于 2008-10-03T14:34:20.917 に答える
2

keys代わりにメソッドを使用しないのはなぜiterkeysですか?そうすれば、イテレータではなくリストを返すため、1つのループでそれを行うことができます。

于 2008-10-03T14:32:12.547 に答える
1

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

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

for key in exclusion.intersection(a):
    del a[key]
于 2008-10-03T15:09:12.143 に答える