0

私は何時間もこのことに取り組んできましたが、まだ理解できません:O

私が抱えている問題はこれです。要素として 4 要素のタプル、キーとして整数を持つ辞書があるとします。要素がディクショナリ全体 (すべてのタプルに属する) から削除され、2 つのタプル (要素) が同じになると、2 つのタプルのキーは合計されません。代わりに、新しい要素が形成され、その要素のキーは前の 2 つのキーのいずれかになります。

私が辞書を持っているとしましょう:

dict={('A','B','D','C'): 4, ('C','B','A','D'):5, ('D','A','C','B'):3,('D','A','B','C'):1}

ここで、辞書全体から 1 文字を削除したいと思います。たとえば、「B」を削除したい場合。次の新しい辞書が作成されますが、2 つの要素が同じであるため返されません。

 {('A','D','C'): 4, ('C','A','D'):5, ('D','A','C'):3,('D','A','C'):1}

('D','A','C'):3,('D','A','C'):1になる代わりに('D','A','C'):4、これが最終的に起こることです:

('D','A','C'):3他のタプルと一緒に

基本的に、タプルの 1 つが消えます。

これは私が現在使用している方法です:

for next in dict:
new_tuple=()
for i in next:
    if i!='A':
        new_tuple+=(i,)
new_dict[new_tuple]=dict[next]

上記のコードは、new_dict を次のように返します。

 {('A','D','C'): 4, ('C','A','D'):5, ('D','A','C'):3}

では、ディクショナリ全体のすべてのタプルから 1 文字を削除し、2 つのタプルが同じに見える場合、それらをマージしてキーを追加するにはどうすればよいでしょうか?

4

1 に答える 1

3

各キーと値のペアが影響を受けるため、辞書全体を再構築する必要があります。現在重複しているキーに遭遇した場合、 a を使用しdefaultdictてマージを容易にすることができます。

from collections import defaultdict

new_dict = defaultdict(int)
for key, value in old_dict.items():
    new_key = tuple(i for i in key if i != 'A')
    new_dict[new_key] += value

最初に検索すると、デフォルトでに設定されるnew_keyため、最初にキーに遭遇したときに更新する古い値を追加するだけです。次にキーに遭遇すると、値は加算されて「マージ」されます。new_dict0new_dict

于 2012-11-30T15:53:30.717 に答える