2010-03-10 6 views
4

다음 사전을 "remaining_pcs"또는 "discount_ratio"값으로 정렬하는 방법은 무엇입니까?Python 사전에서 사전 키로 정렬

promotion_items = { 
    'one': {'remaining_pcs': 100, 'discount_ratio': 10}, 
    'two': {'remaining_pcs': 200, 'discount_ratio': 20}, 
} 

편집

내가 위에서 사전의 정렬 된 목록을 받고 무엇을 의미, 사전 자체를 정렬 할 수 없습니다.

+4

사전을 정렬 할 수 없습니다. –

답변

5

당신 만 키를 정렬 할 수 있습니다 (앤드류의 인용문에서 수년 전에 작성한 것처럼) 사전의 값 (또는 항목 또는 값)을 별도의 목록에 추가하십시오. 예 : 명시된 기준에 따라 키를 정렬하려면

promotion_items = { 
    'one': {'remaining_pcs': 100, 'discount_ratio': 10}, 
    'two': {'remaining_pcs': 200, 'discount_ratio': 20}, 
} 
def bypcs(k): 
    return promotion_items[k]['remaining_pcs'] 
byrempcs = sorted(promotion_items, key=bypcs) 
def bydra(k): 
    return promotion_items[k]['discount_ratio'] 
bydiscra = sorted(promotion_items, key=bydra) 
+0

두 번째'def bypcs'에 대해서는'def bydra'를 의미한다고 생각하십니까? – unutbu

+0

@unutbu, 맞아. 마이크 그레이엄이 이미 내 A를 편집하여이 문제를 해결 한 것을 알았다. –

2

To sort a dictionary를 참조하십시오

사전은 정렬 할 수 없습니다 - 매핑에는 순서가 없습니다! - 을 정렬해야 할 필요가 있다고 생각하면 키를 정렬하고 싶지 않습니다 ( 별도 목록).

0

만약 'remaining_pcs''discount_ratio'는 중첩 된 사전의 유일한 열쇠입니다 :

result = sorted(promotion_items.iteritems(), key=lambda pair: pair[1].items()) 

하는 것은 다음 다른 키가있을 수있는 경우 :

def item_value(pair): 
    return pair[1]['remaining_pcs'], pair[1]['discount_ratio'] 
result = sorted(promotion_items.iteritems(), key=item_value) 
관련 문제