2016-12-28 8 views
3

私はキーがタプルである辞書を持っています。これらのタプルのいくつかは、互いの順列(例えば、(1, 2)(2, 1))です。 1つの順列の値をもう1つの値に加え、2番目の順列を取り除きたい。Python:辞書でタプル順列の値を追加してエントリを削除する

d = {(1, 3): 14, (1, 4): 13, (1, 2): 10, (11, 11): 19, (3, 1): 50, (4, 1): 5, ...} 

{(1, 3): 64, (1, 4): 18, (1, 2): 10, (11, 11): 19, ...} 

する必要があります私はそれらをソートして、辞書内の位置に基づいて何かを考えたが、これはスケールアップすることは非常に簡単ではありません。入力は歓迎です!

答えて

1

@wimは、あなたはおそらく、あなたが新しい辞書に値を累積するためにcollections.Countersumを使用することができ、frozensetを使用する必要があり、示唆したように:

from collections import Counter 

d = {(1, 3): 14, (1, 4): 13, (1, 2): 10, (11, 11): 19, (3, 1): 50, (4, 1): 5} 

r = sum((Counter({frozenset(k): v}) for k, v in d.items()), Counter()) 
print(r) 
# Counter({frozenset({1, 3}): 64, frozenset({11}): 19, frozenset({1, 4}): 18, frozenset({1, 2}): 10}) 

あなたはバニラ辞書にCounterオブジェクトをオンにすることができ、あなたが辞書の理解を使いたいなら、キーはタプルに戻ります。

2

タプルではなくdictキーにfrozensetを使用します。次に、注文について心配することなく、あなたが進むにつれてそれらを追加することができます。

関連する問題