2016-08-18 3 views
-1

나는파이썬 사전 (정렬되지 않은 선택 키)

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() 메서드는 현재 값이있는 경우 현재 값을 반환하고 그렇지 않은 경우 지정된 기본값을 반환합니다.이 경우 0입니다.

또한 최종 사전에는 고유 한 순서가 없으므로 Anaconda의 Python 3.5.2에서 얻은 대답 {('A', 'C'): 1, ('A', 'B'): 2}을 얻을 수 있습니다.

+0

'collections.Counter'도 여기에 적합 할 수 있습니다. – Blender

+0

'turple (sorted (datum))'은'('A', 'B')'를 반환 할 것이므로 @Rory가 물었 듯이 터플 키/값 쌍의 문자입니까? – d3r1ck

+0

@ d3r1ck 튜플 키/값 쌍은 문자입니다. :) – dPdms

1

사용

frozenset (('A', 'B')) 키로

.