0

Pythonの辞書の複数の値から特定のアイテムを削除しようとしていますが、これを行う方法が完全にはわかりません。たとえば、辞書では次のようになります。

d  = {('hello', 'hi', 'how are you'): 2, ('hi', 'hello', 'how are you'): 1}

残っているのが次のようになるように、「hi」を削除するにはどうすればよいですか。

d  = {('hello', 'how are you'): 2, ('hello', 'how are you'): 1}
4

4 に答える 4

3

どうやらキーを変更したいようです。したがって、対応する値を新しいキーで保存し、古いキーを削除するだけです。ただし、あなたの場合、すべてのアイテムを変更したいので、新しい dict を作成する方が簡単です。

d2 = {}
for key, value in d.iteritems():
    key = list(key)
    if 'hi' in key:
        key.remove('hi')
    d2[tuple(key)] = value

d2現在含まれている{('hello', 'how are you'): 1}

ご覧のとおり、辞書には同じキーを2回含めることができないため、例とは異なり、値は1つしか含まれていません。

于 2012-11-26T19:13:22.497 に答える
2

両方のキーが同じになったため、ここでは期待される出力が得られません。そのため、結果の dict にはそのうちの 1 つしか見つかりません。

In [142]: d  = {('hello', 'hi', 'how are you'): 2, ('hi', 'hello', 'how are you'): 1}

In [143]: {tuple(y for y in x if y!='hi'):d[x] for x in d}
Out[143]: {('hello', 'how are you'): 1}
于 2012-11-26T19:13:25.820 に答える
1

これでできるはず

answer = {}
for k,v in d.iteritems():
    key = tuple(i for i in k if i!='hi')
    answer[key] = v
d = answer
于 2012-11-26T19:13:29.673 に答える
1

これがうまくいくかどうかはわかりませんが、これにより新しい辞書が作成され、削除後に衝突するキーの値が合計されます'hi'(それがあなたがやりたいことだと仮定します-そうでない場合は、この答えを無視してください:)):

>>> from collections import defaultdict
>>> new_d = defaultdict(int)
>>> for k, v in d.iteritems():
...   new_d[tuple(i for i in k if i != 'hi')] += v
...
>>> new_d
defaultdict(<type 'int'>, {('hello', 'how are you'): 3})

これは出力とは一致しませんが、他の人が説明したように、辞書は特定の値のキーを 1 つしか持てないため、これを 1 つに結合します。

于 2012-11-26T19:18:22.390 に答える