辞書があるとします。
D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}
3
そして、次のように all を削除したかったのD1
です。
D1 = {'A1' : [2], 'B1': [], 'C1' : [4, 5]}
辞書があるとします。
D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}
3
そして、次のように all を削除したかったのD1
です。
D1 = {'A1' : [2], 'B1': [], 'C1' : [4, 5]}
ここにワンライナーがあります:
threeless = {k: [e for e in v if e != 3] for k, v in D1.iteritems()}
私が読んだすべての回答は、新しいオブジェクトを作成するように思えます。エリックの回答の新しいディック、他の回答の新しいリストです。
特に辞書内の項目数やリストの要素数が多い場合は、各リストをその場で変更する方がよいと思います。
D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}
for li in D1.itervalues():
while 3 in li:
li.remove(3)
3 がキーではなく値に常に表示されると仮定すると、このようなものが機能します
>>> for v in D1.values():
... if 3 in v:
... v.remove(3)
...
>>> D1
{'A1': [2], 'C1': [4, 5], 'B1': [3]}
編集:複数回発生する可能性があることに気付きました。これを試してください
>>> D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}
>>> for k, v in D1.items():
... D1[k] = filter(lambda x: x!=3, v)
...
>>> D1
{'A1': [2], 'C1': [4, 5], 'B1': []}
for l in D1.itervalues():
l[:] = [item for item in l if item != 3]
これはデータを構造化する奇妙で非効率的な方法であり、この削除にはしばらく時間がかかることに注意してください。
キーをループしてリストのフィルターを呼び出すアプローチを次に示します。
>>> D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}
>>> for k in D1:
... D1[k] = filter(lambda v: v != 3, D1[k])
...
>>> D1
{'A1': [2], 'C1': [4, 5], 'B1': []}
リストのキーを反復処理し、それらから sD1
を削除3
します。
D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}
def rem_d(D1,n):
for d in D1:
D1[d] = [i for i in D1[d] if i != n]
rem_d(D1,3)
D1
{'A1' : [2], 'B1': [], 'C1' : [4, 5]}