2017-08-12 15 views
0

現在、タプルペアをキーとして使用する辞書を作成しました。私の辞書は現在、(a、b)と(b、a)などのペアを別々にカウントしていますが、最終的には(a、b)==(b、a)が必要です。タプルをキーとする辞書

は現在、私のコードのその部分は、次のようになります。

final = collections.defaultdict(list) 
for a,b in pairs: 

    final[(a[0],b[0])].append((a[2],a[1])) 
    final[(b[0],a[0])].append((b[2],b[1])) 

私がチェックしなければならない場合(B、A)の(a、b)はすでにそれを追加する前に辞書に存在していますか?それとも、すべてが完了した後に辞書を修正するのですか?

+0

リピートは不要ですか? – clabe45

+0

はい。可能であれば(b、a)キーを作成せずに、(a、b)または(b、a)ならば(a、b)キーに値を追加したいです。 – Hello

+0

'(a、b) 'キー、' a'と 'b'はお互いに等しいのですか? –

答えて

1

frozenset([a, b])を使用してください。順序とは無関係に比較を設定しますが、不変であるため、フリーキーのみを辞書キーとして使用できます。

a == bの場合、キーはfrozenset([a])になりますが、これが問題であれば、計画を立てることができます。

0
pairs = [frozenset([1,2]), frozenset([3,4]), frozenset([2,1]), 
frozenset([5,6]), frozenset([7,8]), frozenset([6,5])] 

for pair in pairs: 
    pair_count.update({pair: pair_count.get(pair, 0) + 1}) 

pair_count 
{frozenset([5, 6]): 2, frozenset([1, 2]): 2, frozenset([8, 7]): 1, frozenset([3, 4]): 1} 
関連する問題