2015-02-06 5 views
2

제목에서 잘 설명되지 않았 음을 알고 있으므로 여기에서 더 나은 작업을 시도하고 수행 할 것입니다. 사전의 키를 각각의 값으로 정렬 한 다음 알파벳순으로 동일한 값을 가진 키를 정렬하려고합니다. 이상적으로 모듈을 사용하지 않고 이것을 수행하는 가장 좋은 방법은 무엇입니까?값에 따라 사전 키 정렬 다음에 알파벳순으로 동일한 값을 갖는 사전 키 정렬

파이썬 같은 일종의 자동으로이 작업을 수행 하는가 :

sorted(dictionary.items(), key=lambda x: x[1]) 

나는 위의 코드를 시도하고 작동하는 듯하지만, 그것은 단지 우연의 일치가 있었다인지 아닌지 내가 말할 수 없었다. 나는 문서에서 아무 것도 찾을 수 없었고, 나는 그것이 항상 효과가 있는지 알 필요가있다.

부터 사전 :

['c', 'd', 'a', 'b'] 

(1, 2, 2, 3)와 동일한 값

항목 순으로 정렬 :

dictionary = {'d':2, 'c':1, 'a':2, 'b':3} 

값으로 정렬

['c', 'a', 'd', 'b'] 

(1, 2, 2, 3)

+0

이것은 여러 번 반복되는 것 같습니다. 이 답변을 확인하십시오 : http://stackoverflow.com/questions/7076108/sorting-the-content-of-a-dictionary-by-thevalue-and-by-the-key?rq=1 – beroe

답변

2

난 당신이 원하는 생각 :

과 동일
sorted(dictionary.items(), key=lambda t: t[::-1]) 

: 튜플은 전적으로를 분류되어 있기 때문에

def reverse_tuple(t): 
    return t[::-1] 

sorted(dictionary.items(), key=reverse_tuple) 

이 작동합니다. 첫 번째 요소가 비교되면, 그 요소가 동일하면 파이썬은 두 번째 요소로 이동합니다.

이것은 거의 단지 sorted(dictionary.items())입니다. 기본 정렬 순서는 원하는 항목이 아닌 튜플 (즉, 키)의 첫 번째 요소에 의해 결정됩니다. 트릭은 튜플을 그냥 뒤집은 다음 원하는대로 비교 작업을 수행하는 것입니다.

+0

차? 나는 정말로 그런 기능에 정통하지는 않습니다. "내"코드는 다른 질문에서 발견되었고, 나는 그것이 작동하는 것을 보았을 때 복사되었습니다. – CharlieDeBeadle

+1

당신은 단순히 튜플의 인덱스 1 (즉, "값")의 요소를 살펴 봅니다. 두 항목의 값이 같은 경우 정렬 알고리즘은 모든 항목과 용도가 동일하다고 생각하고 입력 한 순서와 동일한 순서로 출력에 넣습니다 ('키'와 관계 없음). Mine은 값이 같은 경우에만 키를 고려합니다. – mgilson

+0

덕분에, 그것은 많은 의미가 있습니다! – CharlieDeBeadle