2016-08-18 6 views
-1

私はPythonの辞書(順不同選択キー)

comSick=[(A,B),(A,C),(B,A)] 

DICはなりdic.has_keyについての質問を私のコードは

def insertToDic(dic,comSick): 
    for datum in comSick : 
      if dic.has_key(datum): 
        dic[datum]+=1 
      else : 
        dic[datum] =1 

持っ

dic = {(A,B) : 1, (A,C) : 1, (B,A) : 1} 

しかし、私が望むものは順序付けされていないキーです(A、B)=(B、A))

dic = {(A,B) : 2, (A,C) : 1} <-- this is what I want 

どうすればよいですか?

答えて

1

はこれを試してみてください:

def insertToDic(dic,comSick): 
    for datum in comSick : 
     sorted_datum = tuple(sorted(datum)) 
     dic[sorted_datum] = dic.get(sorted_datum, 0) + 1 

comSick=[('A', 'B'), ('A', 'C'), ('B', 'A')] 

dic = {} 
insertToDic(dic, comSick) 
print(dic) 

私はいくつかの変更を加えました。私は辞書を更新する前にデータをソートしました。これにより、(A,B)(B,A)のいずれかが他方に変更されます。 ABが何であるかは明確ではないので、BAより低くなる可能性があります。あなたは文字列'A''B'を意味しましたか?それは私が使ったものです。

また、値の増分を変更しました。 get()メソッドは、存在する場合は現在の値を返し、存在しない場合は既定値を返します。この場合はゼロです。

また、最終的な辞書には固有の順序がないので、答えが{('A', 'C'): 1, ('A', 'B'): 2}になることがあります。これはAnacondaのPython 3.5.2で得られたものです。

+0

「コレクション。カウンター」もここにあてはまるかもしれません。 – Blender

+0

'turple(sorted(datum))'は '( 'A'、 'B')'を返すので、@ Roryが尋ねるようにタプルのキー/値のペア文字ですか? – d3r1ck

+0

@ d3r1ckタプルキーと値のペアは文字です:) – dPdms

1

キーとして使用

のfrozenset(( 'A'、 'B'))