2012-04-30 4 views
1

Possible Duplicate:
In Python, how to I iterate over a dictionary in sorted order?파이썬으로 사전을 어떻게 주문합니까?

사전에 도움이 필요합니다. 저는 두 개의 사전을 가지고 있는데, 두 개의 사전에 동일한 키 값을 추가하고 싶습니다. 같은 키를 가진 값을 합산하는 목록을 만들어야합니다. 목록을 만들었지 만 두 사전에있는 키가 유일한 값인 모든 값은 모든 계산을 마친 후에 추가됩니다. 내 말은 : 그것은 공을 가지고 dectionary이 0이 있는지 확인하고 다음 (2를 NOT) 1 걸릴 것 때문에

summing= [6, 2, 5, 36, 8] 

과 :

dectionary1= {8: 2, 0: 6, 2: 5, 3: 34} 
dectionary2= {8: 6, 1: 2, 3: 2} 

내 목록이 있어야합니다 목록을 주문하려면 1 단계에서 찾았는지 확인하십시오. 그것이 처음에 키 소요

다음
summing=[8, 6, 5, 36, 2] 

(8) (0)! :

는 지금까지이있어 나는 그것을 순서대로 원한다.

내 코드를 보려면, 내가 지금까지 무엇을 가지고 그 :

dic1= {8: 2, 0: 6, 2: 5, 3: 34} 
dic2= {8: 6, 1: 2, 3: 2} 
p=[] 
for x in dic1: 
    if x in dic2: 
     g=dic1[x]+dic2[x] 
     p=p+[g] 
    else: 
     p=p+[dic1[x]] 
for m in dic2: 
    if m in dic1: 
     p=p 
    else: 
     p=p+[dic2[m]] 

내가 오름차순, 훨씬 쉬울 것이다 주문한 사전을 만들 수 있다면 생각하지만, 어떻게?

내 파이썬 3.2

하나가 collections.OrderedDict()를 사용하는 것입니다, 당신은 여기에 두 가지 옵션이 당신에게

+1

'common_keys = set (dic1.keys()) & set (dic2.keys())'. 그리고 dict 요소는 정렬되지 않으므로 귀하의 경우에는 "순서대로"같은 것이 없습니다. – ThiefMaster

답변

8

감사 윙 IDE,하지만 난 쉽게 옵션은이 방법을 수행하는 것입니다 생각 :

[dic1.get(x, 0)+dic2.get(x, 0)for x in sorted(dic1.keys() | dic2.keys())] 

먼저 in either of the dictionaries, sort this into the right orderloop over it with a list comprehension의 키 집합을 만들고 (or 0 if the value doesn't already exist) 값을 두 개 추가합니다.

>>> dic1= {8: 2, 0: 6, 2: 5, 3: 34} 
>>> dic2= {8: 6, 1: 2, 3: 2} 
>>> [dic1.get(x, 0)+dic2.get(x, 0)for x in sorted(dic1.keys() | dic2.keys())] 
[6, 2, 5, 36, 8] 

참고 dict.keys()set-like dictionary view 반환 3.x를,이 경우에만 작동합니다. python 2.7.x에서이 작업을 수행하려면 이 최적 일 것입니다. 대신 dict.viewkeys()을 사용하십시오.

+0

구문을 다시 확인하십시오. 'TypeError : Python 2.7.x에서 | 'list'와 'list'(공백으로''''와'') 사이의 피연산자 유형을 지원하지 않습니다. –

+0

'[dic1.get (x, (x, 0) x에 대한 dic2.get (x, 0) 정렬 된 (집합 (dic1.keys()) | set (dic2.keys()))]' –

+0

in python3,'[dic1.get + dic2.get (x, 0) 정렬 된 (dic1.keys() | dic2.keys())]'x가 작동해야 함 ('set()'이 필요 없음) – ch3ka

관련 문제