2012-06-20 4 views
2

저는 파이썬 프로그래밍에 익숙하지 않으며 문제에 대한 교과서를 아직 구입하지 않았습니다. (저는 상점이나 아마존에서 오늘 구입하고 있습니다). 그 동안, 내가 만난 다음과 같은 문제로 나를 도울 수 있습니까? 정렬 된 목록은 다음과 같이 보이도록사전 객체의 숫자 정렬 숫자

stock = [ 
    { 'date': '2012', 'amount': '1.45', 'type': 'one'}, 
    { 'date': '2012', 'amount': '1.4', 'type': 'two'}, 
    { 'date': '2011', 'amount': '1.35', 'type': 'three'}, 
    { 'date': '2012', 'amount': '1.35', 'type': 'four'} 
] 

나는 양의 열을 기준으로 다음 양 날짜 열을 기준으로 목록을 정렬하고 싶습니다 :

이 같은 사전 객체의 목록을 가지고

stock = [ 
    { 'date': '2011', 'amount': '1.35', 'type': 'three'}, 
    { 'date': '2012', 'amount': '1.35', 'type': 'four'}, 
    { 'date': '2012', 'amount': '1.4', 'type': 'two'}, 
    { 'date': '2012', 'amount': '1.45', 'type': 'one'} 
] 

이제는 sorted()를 사용해야한다고 생각하지만 초보자에게는 내가 본 개념을 이해하는 데 어려움이 있습니다.

나는이 시도 :

from operator import itemgetter 
all_amounts = itemgetter("amount") 
stock.sort(key = all_amounts) 

을하지만이 영숫자 오히려 수치 이상의 분류 된 목록에 결과.

누군가 겉으로보기에는 단순한 정렬 방법을 알려주시겠습니까? 고맙습니다!

+1

당신은 왜 당신의 사전에있는 데이터를 숫자로 변환하지 않습니까? 그것은 더 나은 표현이 될 것 같습니다. – BrenBarn

+0

'주식 '이 유효한 파이썬이 아닙니다. 그것을 고쳐주세요 –

답변

3

정렬 조건이 operator.itemgetter 일 경우 너무 복잡합니다. 당신은 람다 함수를 사용해야합니다 :

stock.sort(key=lambda x: (int(x['date']), float(x['amount']))) 

또는

all_amounts = lambda x: (int(x['date']), float(x['amount'])) 
stock.sort(key=all_amounts) 
또한 파이썬의 종류가 stable 사실 사용할 수 있습니다
+0

와우! 그것은 내가 필요로했던 바로 신속하고 정확하게 슈퍼였다. 고맙습니다. 우미노, 나는 다음의 시간을 통해 무엇을 의미하는지 알기 위해 노력할 것입니다 :-) – user1464409

+0

'all_amounts [stock [0]]을 시도해보고 정렬 할 튜플을 만드는 방법을보십시오. – eumiro

0

: 같은 키를 사용하여 항목 때문에

stock.sort(key=lambda x: int(x["amount"])) 
stock.sort(key=lambda x: int(x["date"])) 

을 정렬 할 때 상대 위치를 유지하면 (절대 교체되지 않음), 여러 번 정렬하여 복잡한 정렬을 구축 할 수 있습니다.