튜플

2016-06-08 6 views
0

특정한 요소를 추가하는 방법이있다 I : I는 동일한 첫 번째 요소를 갖는 제 2 요소를 추가 할 필요튜플

([(5,2),(7,2)],[(5,1),(7,3),(11,1)]) 

.

출력 : 여기 [(5,3),(7,5),(11,1)]

+0

귀하가 시도한 것에 대한 최소한의 완전하고 검증 가능한 예를 보여주십시오. – user161778

답변

1

collections.Counter에 대한 좋은 사용 사례입니다 ...

from collections import Counter 
tup = ([(5,2),(7,2)], [(5,1),(7,3),(11,1)]) 
counts = sum((Counter(dict(sublist)) for sublist in tup), Counter()) 
result = list(counts.items()) 
print(result) 

하나의 단점은 입력의 순서를 잃게 될 것입니다. 그들은이 핵심으로 분류 한 것으로 나타났습니다 , 그래서 당신은 항목을 정렬 할 수 :

result = sorted(counts.items()) 

Counter는 그 목적 빈의 "카운트」를 개최하는 사전이다. 카운트는 똑같이 간단하게 추가 할 수 있도록 설계되었습니다 (카운트를 "bin-wise"로 추가 함) - 두 카운터에 bin이 없으면 누락 된 bin의 값은 0으로 간주됩니다. 그래서, 그 이유는 우리가 당신이 원하는 값을 가진 사전을 얻기 위해 카운터의 무리에 sum을 사용할 수있는 이유입니다. 두 값 것이다 - 불행하게도이 솔루션를 들어, Counter

Counter([(1, 2), (3, 4)]) 

(1, 2)(3, 4)Counter을 만들 것입니다 ... 일반 매핑과 같은 2 항목 시퀀스를 산출 반복 가능를 사용하여 인스턴스화 할 수 없습니다

Counter(dict([(1, 2), (3, 4)])) 

13Counter를 생성 (및 24 값) : 그것은 당신이 그러나 매핑을 만들 경우 예상대로 작업을 수행 1.합니다.

1

코드를보십시오

dt = {} 
tp = ([(5,2),(7,2)],[(5,1),(7,3),(11,1)]) 
for ls in tp: 
    for t in ls: 
    dt[t[0]] = dt[t[0]] + t[1] if t[0] in dt else t[1] 
print dt.items() 

여기에서 채택 된 접근법은 튜플들의 목록을 반복하는 것 (.. 수 있고, 무력)과, 사전 같이 튜플의 데이터를 저장하는, 상기 튜플의 첫 번째 요소 t[0]key이고 두 번째 요소 t[1]value입니다.
튜토리얼의 첫 번째 요소에서 동일한 키가 발견 될 때마다 튜플의 두 번째 요소와 함께 값을 추가하십시오. 결국 key, value 쌍을 모두 필요로하는 사전 dt을 갖게됩니다. 이 사전을 튜플 목록 dt.items()으로 변환하면 우리는 출력을 얻습니다.

+0

더 자세히 설명해 주시겠습니까? –

+0

@zaolee_dragon : 답변에서 설명이 업데이트되었습니다. –