2011-11-19 1 views
1

저는 파이썬을 사용하고 있습니다. 먼저 'day'다음에 'job'에 의해 사전 목록을 정렬하려면 어떻게합니까?
'작업'의 종류 (안 순) priority_list에 근거 할 필요가 : 정렬사전 목록을 2 개의 키로 정렬하는 방법 중 하나는 임의의 목록을 기반으로합니다

priority_list= ['c','a','b'] 

my_list_of_dicts = [ 
{'day':5,'job':'c','irrelevant_key':'more stuff'}, 
{'day':1,'job':'a','irrelevant_key':'stuff'}, 
{'day':5,'job':'b','irrelevant_key':'more stuff'}, 
{'day':1,'job':'b','irrelevant_key':'other stuff'} 
] 

결과는 다음과 같아야합니다

[{'day':1,'job':'a','irrelevant_key':'stuff'}, 
{'day':1,'job':'b','irrelevant_key':'other stuff'}, 
{'day':5,'job':'c','irrelevant_key':'more stuff'}, 
{'day':5,'job':'b','irrelevant_key':'more stuff'}] 

정말 감사합니다,

답변

3
my_list_of_dicts.sort(key=lambda x: (x['day'], priority_list.index(x['job']))) 
+0

감사합니다. 그것은 위대한 작품. – sammy

3
def key(d): 
    return d['day'], priority_list.index(d['job']) 

sorted(my_list_of_dicts, key=key) 
2

예제와 같이 매우 작은 목록의 경우 list.index()을 사용하는 대답은 wor 괜찮아.

그러나 목록이 큰 경우 priority_list 개 중 dict 개를 작성하는 것이 좋습니다. dict 조회는 O (1)이고 반면에 list 조회는 O (N)입니다.

priority_dict = dict((x, i) for i, x in enumerate(priority_list)) 

def key_day_priority(d): 
    return d['day'], priority_dict[d['job']] 

my_list_of_dicts.sort(key=key_day_priority) 
관련 문제