2014-10-24 4 views
0

나는 사전의 목록을 가지고 있고 주어진 순서에 여러 개의 키 (1 '이름', 2 '시작'과 3 '끝')별로 정렬 : Python에서는 sorted() 메서드를 사용하여 우선 순위 필드별로 사전 목록을 정렬 할 수 있습니까?

sorted_list = sorted(list, key=lambda dict: (dict['Name'], dict['Start'], -dict['End'])) 

내가 마지막으로 정렬이 완료하려면

dict['Status']은 "gene", "mRNA", "exon"및 "CDS"와 같은 문자열 이름입니다. "유전자"라는 이름은 다른 것보다 높고 "CDS"는 다른 것보다 낮아야합니다. 답변에 대한

감사합니다,

+1

그래서 지금까지 시도 것을 우리에게 보여

귀하의 실제 문제는 간단한 조회 테이블에 의해 해결된다? –

답변

2

첫 번째 조언 : 는 가변 이름으로하지 사용 내장-이름을. 나중에 사용하려고하면 지옥처럼 혼란스러워 할 것입니다. 예 :

dict = [1, 2, 3] 
d = dict(a="b") 

은 비참하게 실패합니다. 따라서 변수 목록, dict, file, str, int 및 기타 모든 변수를 호출하지 마십시오.

priorities = dict(gene=0, CDS=1000) 
sorted_list = sorted(list, 
     key=lambda d: (d['Name'], d['Start'], -d['End'], 
     priorities.get(d['Status'], 1))) 
+0

오타 :'priorities.get (d [ '상태'], 1)))'이어야합니다. 나는 1을 기본값으로 사용한다고 추측합니다. OTOH, 기본값을 제공하지 않으려 고합니다. 잘못된 우선 순위 이름이 나타나면 명시 적 키 오류가 발생합니다. 물론 원한다면 KeyError 예외를 잡아 전체 dict을 인쇄 할 수 있습니다. –