2014-05-17 2 views
0

나는이 같은 두 개의 2D 목록을 subract해야합니다파이썬에서 두 개의 2D 목록을 빼는 방법은 무엇입니까?

result= [['some',1],['other',1],['thing',0]] 

또는

result= [['some',1],['other',1]] 

그것은 있어야 할 :

list1= [['some',2],['other',1],['thing',5]] 

list2= [['some',1],['thing',5]] 

결과이 같이해야한다 사전이 아닌 목록; 순서는 중요하지 않습니다. 답변

tmp=[[k,v] for k,v in (Counter(dict(list1)) - Counter(dict(list2))).items()] 

타이들 :

+3

는 지금까지 아무것도 시도? 얘기 할 코드 몇 개를 보여주세요 – Pavel

+1

[거의 동일한 질문에 대한 답변]에서 하나의 피연산자를 문자 그대로 뒤집을 수 있습니다 (http://stackoverflow.com/questions/23714227/how-to-combine-2-2d-lists). -in-python) 그리고 대답을 얻으십시오. – roippi

+0

3 개의 downvotes 및 이전 질문에 대한 3 upvotes. 기묘한! –

답변

2
from collections import Counter 
list1= [['some',2],['other',1],['thing',5]] 

list2= [['some',1],['thing',5]] 
c1 = Counter({item[0]: item[1] for item in list1}) 
c2 = Counter({item[0]: item[1] for item in list2}) 
result = [[key, value] for key, value in (c1-c2).items()] 

result 
[['other', 1], ['some', 1]] 
-2

코드 :

list1 = [['some',2], ['other',1], ['thing',5]] 
list2 = [['some',1], ['thing',5]] 

def list_substractor(l1, l2): 
    d1 = dict(l1) 
    d2 = dict(l2) 

    for key, value in d1.items(): 
     if key in d2.keys(): 
      d1[key] = d1[key] - d2[key] 

    for item in set(set(d2.keys()) - set(d1.keys())): 
     d1[item] = -d2[item] 

    return [[key, value] for key, value in d1.items()] 

print list_substractor(list1, list2) 
print list_substractor(list2, list1) 

출력 :

[['thing', 0], ['other', 1], ['some', 1]] 
[['thing', 0], ['other', -1], ['some', -1]] 
+1

적어도 코드를 한 번 테스트하십시오. 명확하게 보이는 구문 오류. –

0
>>> d1, d2 = dict(list1), dict(list2) 
>>> d = {key: d1[key] - d2.get(key, 0) for key in d1} 
>>> d.items() 
[('thing', 0), ('other', 1), ('some', 1)] 
>>> map(list, d.items()) 
[['thing', 0], ['other', 1], ['some', 1]] 
+3

게시 한 코드를 설명해야합니다. –

관련 문제