2009-10-05 7 views
0

두 개 이상의 목록이 있습니다. 이 같은 일부 일 :두 개의 목록을 결합하십시오 : 비슷한 키를 가진 합계 값

listX = [('A', 1, 10), ('B', 2, 20), ('C', 3, 30), ('D', 4, 30)] 
listY = [('a', 5, 50), ('b', 4, 40), ('c', 3, 30), ('d', 1, 20), 
     ('A', 6, 60), ('D', 7, 70]) 

이 같은 중복 요소를 이동할 결과를 얻으려면 : 내 결과는 listX + listY에서 모든 목록을 가져올 수 있지만 경우에 예를 들어 가 중복됩니다 결과 그래서

result = [('A', 7, 70), ('B', 2, 20), ('C', 3, 30), ('D', 11, 100), 
      ('a', 5, 50), ('b', 4, 40), ('c', 3, 30), ('d', 1, 20)] 

(A, 7, 70)처럼 listY.so에서 listX의 ('A', 1, 10), ('D', 4, 30)는 제시 요소 또는 exitst 함께

,617,451을 ('A', 1, 10)('A', '6', '60')을 가산하여 얻어진

아무도 나를이 문제를 해결할 수 있습니다.? 감사합니다. .

+0

이것은 읽을 수 없습니다. 텍스트 서식을 지정하십시오. – Ikke

+0

A로 편집하십시오.) 하이 라이터/편집기 구문을 사용하고 B.) 반 판독 가능합니다. 질문을 이해하는 데 어려움을 겪고 있습니다. –

+0

텍스트를 읽을 수 있도록 시간을 보내십시오. – grigy

답변

2

사전과 같은 목록을 사용하는 것 같습니다. 사전 대신 목록을 사용하는 이유는 무엇입니까?

이 왜곡 된 질문에 대한 나의 이해는 동일한 값의 첫 번째 요소가있는 튜플에 값을 더하고 싶다는 것입니다.

counter = dict(
    (a[0], (a[1], a[2])) 
    for a in listX 
) 

for key, v1, v2 in listY: 
    if key not in counter: 
     counter[key] = (0, 0) 
    counter[key][0] += v1 
    counter[key][1] += v2 

result = [(key, value[0], value[1]) for key, value in counter.items()] 
+0

감사합니다 spoonMeiser.it는 코드에 문제가있는 것 같습니다. – kn3l

8

사전을 사용하면 매우 간단합니다.

combined = {} 
for item in listX + listY: 
    key = item[0] 
    if key in combined: 
     combined[key][0] += item[1] 
     combined[key][1] += item[2] 
    else: 
     combined[key] = [item[1], item[2]] 

result = [(key, value[0], value[1]) for key, value in combined.items()] 
+0

저주, 단 몇 초 만에 나에게 비슷한 대답을 이길! – SpoonMeiser

+0

그가 실제로 _adding_ 값이며 중복을 제거하지 않는다는 것을 이해하는 데는 어느 정도 시간이 걸렸습니다. 팁을 주신 덕분에 – NicDumZ

1

내가 사용을 사전을 말할 것 :

result = {} 
for eachlist in (ListX, ListY,): 
    for item in eachlist: 
     if item[0] not in result: 
      result[item[0]] = item 

그것은 당신이 아니라 데이터를 표현하지 않는 구조로 데이터가있는 경우 데이터 조작을 하는가 항상 까다로운. 더 나은 데이터 구조 사용을 고려하십시오.

+0

을 보내 주셔서 감사합니다. – kn3l

0

를 사용하여 사전과 '수'방법

나는 같은 것을 할 것입니다.

d = {} 
for x in (listX + listY): 
    y  = d.get(x[0], (0, 0, 0)) 
    d[x[0]] = (x[0], x[1] + y[1], x[2] + y[2]) 

d.values() 
관련 문제