1

辞書があるとします。

D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}

3そして、次のように all を削除したかったのD1です。

D1 = {'A1' : [2], 'B1': [], 'C1' : [4, 5]}
4

6 に答える 6

5

ここにワンライナーがあります:

threeless = {k: [e for e in v if e != 3] for k, v in D1.iteritems()}
于 2013-07-21T21:21:44.450 に答える
3

私が読んだすべての回答は、新しいオブジェクトを作成するように思えます。エリックの回答の新しいディック、他の回答の新しいリストです。

特に辞書内の項目数やリストの要素数が多い場合は、各リストをその場で変更する方がよいと思います。

D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}

for li in D1.itervalues():
    while 3 in li:
        li.remove(3)
于 2013-07-21T22:02:16.070 に答える
2

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': []}
于 2013-07-21T21:19:33.337 に答える
1
for l in D1.itervalues():
    l[:] = [item for item in l if item != 3]

これはデータを構造化する奇妙で非効率的な方法であり、この削除にはしばらく時間がかかることに注意してください。

于 2013-07-21T21:21:37.683 に答える
1

キーをループしてリストのフィルターを呼び出すアプローチを次に示します。

>>> 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': []}
于 2013-07-21T21:31:29.820 に答える
1

リストのキーを反復処理し、それらから 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]}
于 2013-07-21T21:20:09.743 に答える