2010-01-31 2 views
3

저는 파이썬을 처음 접했고 왜 이렇게 작동하지 않는지 이해할 수 없습니다. 다른 곳에서 제기 된 문제를 찾을 수 없습니다. 나는 내가 목록에() 종류의 호출 볼 유형을 검사하는 경우왜 (dictionary.keys()). sort()가 파이썬에서 작동하지 않습니까?

toto = {'a':1, 'c':2 , 'b':3} 
toto.keys().sort()   #does not work (yields none) 
(toto.keys()).sort()   #does not work (yields none) 
eval('toto.keys()').sort() #does not work (yields none) 

그러나, 그래서 문제가 무엇인가 ..

toto.keys().__class__  # yields <type 'list'> 

나는 일이있는 유일한 방법은 추가입니다 못생긴 임시 변수

temp = toto.keys() 
temp.sort() 

여기에 무엇이 누락 되었습니까? 더 좋은 방법이 있어야합니다.

+0

솔루션에 대해서는 확실하지 않지만 사전 순 키는 순서가 맞지 않습니까? – fauxCoder

+1

@Shraptnel : 정확합니다. OP는 키를 목록에 배치하고 그 목록을 정렬합니다. – bernie

답변

7

sort()의 주소는입니다. None을 반환하면 원래 목록을 그대로두고 정렬 된 복사본을 반환합니다.

+0

그 말이 맞는 것 같습니다. 감사. – nicolas

7
sorted(toto.keys()) 

원하는대로 할 수 있습니다. 사용중인 정렬 방법이 적절한 정렬을하고 없음을 반환합니다.

+1

또한 dict가 큰 경우에 정렬되지 않은 키 목록이 작성 및 제거되지 않도록하려면'sorted (toto.iterkeys()) '를 사용하십시오. –

+1

파이썬 2.6과 3.x에서 'sorted (toto)'를 사용하면 같은 결과를 얻을 수 있습니다. 사실'.keys()'의 사용은 더 이상 사용되지 않습니다. – jathanism

1

sort() 메서드를 정렬하여 none을 반환합니다. 당신은 새로운 반복문을 반환하는 sorted(toto.keys())을 사용해야한다.

+0

비슷한 접미사 표기법을 유지할 방법이 있습니까? 처럼 렌 위해, 하나는 alist을 사용할 수 있습니다 .__ 렌 __() 대신 렌 (alist) – nicolas

+1

의 당신이 리터 호출하는 경우 .__ 렌 __() 당신이 잘못하고 있다는 것을 의미한다. –

+0

조언 주셔서 감사합니다. alist.map() .filter().() .len() 과 같은 후위 표기법을 사용하지 않으므로 힘들 때가 있습니다. operation1 (operation2 (operation3 (arg, arg3), arg2), arg1) – nicolas

관련 문제