2011-01-12 9 views
1

안녕하세요. 나는 그것을 날짜순으로 정렬하여 튜플의 섹션을 정렬하고 반환하고 싶다.파이썬 : 튜플을 날짜순으로 정렬. Noob 여기

첫 번째부터 네 번째 레코드 (튜플 [: 3]) 만 정렬하고 인쇄하고 싶습니다. 이 오류 "형식 오류 반환,

import operator 
sorted(tuple[:3], key=operator.itemgetter('date'), reverse=True) 

을 :하지만

tuple = [('Dec 1, 2010', '7.41', '7.60', '7.37'), 
     ('Dec 4, 2010', '7.41', '7.60', '7.37'), 
     ('Dec 2, 2010', '7.41', '7.60', '7.37'), 
     ('Dec 20, 2010', '7.41', '7.60', '7.37'), 
     ('Dec 16, 2010', '7.41', '7.60', '7.37'), 
     ('Jan 2, 2011', '7.41', '7.60', '7.37')] 

나는 시도했다. 튜플 지수는 str을하지 정수이어야합니다

+8

'tuple'리스트를 호출하지 마십시오. 컨테이너 안에 내장 된'튜플 (tuple) '을 음영 처리합니다. – user225312

답변

7

당신이 date에 의해 점점 것이 아닌 이유는 무엇입니까? 터플의 첫 번째 요소 무엇을 찾고 있습니까?

sorted(records[:3], key=operator.itemgetter(0), reverse=True) 

그런데 tr 비교하기 전에 문자열을 실제 날짜로 변환합니다. 미정 :

from datetime import datetime 
def get_date(record): 
    return datetime.strptime(record[0], "%b %d, %Y") 
sorted(records[:3], key=get_date, reverse=True) 

나는 recordstuple 이름을 변경했습니다. 다른 사람들이 지적했듯이 tuple을 사용하면 형식 생성자를 섀도우 잉합니다. 똑같이 중요합니다 : 튜플이 아닌 목록이고, 변수는 복수형이어야합니다 (컬렉션을 저장함). 의미있는 이름을 가져야합니다.

0

키를 묻는 중 문제가 있습니다. 'date'. 이는 데이터 요소가 'date' 인 사전 인 경우에만 작동합니다.

tokland가 지적한대로 0은 사용자가 요청하는 튜플의 요소이므로 첫 번째 요소입니다.

또한 실제로는 tuple의 이름을 "튜플"로 지정하지 마십시오. 유형 자체의 이름이며 다른 값으로 바꾸지 않으려 고합니다.

+0

그는 튜플 목록을 가지고 있습니다. –

+0

맞아요. 그 이후로도 눈치 챘습니다. – JAL

1

우선, []은 튜플이 아니며 목록 (this post on daniweb.com 참조)이라고합니다.

두 번째로 dictionary에서 keyvalue에 연결합니다. 목록은 일차원이므로 indice를 요청하면 값을 얻을 수 있습니다.

당신은 가장 가능성을 분류하기 전에, datetime.datetime 객체에 날짜를 변환 할
>> dic = {'date' : 'value', 'bla' : 'foo'} 
>> dic['date'] 
value 
>> dic['bla'] 
foo 

>> list = ['a', 'b', 'c'] 
>> list[0] 
a 
>> list[2] 
c 

. 문자열이 귀하의 예 에서처럼 알파벳순으로 이 아닌으로 정렬됩니다.

0

텍스트 'date'은 마법 같은 것이 아닙니다. operator.itemgetter은 그것이 무엇을보고 있는지에 대한 색인으로 전달 된 것을 사용합니다. 'date' 의미를 이해하려고하지 않습니다.

'date'은 문자열입니다. dict에는 문자열 인 키가 있습니다. 귀하의 목록에 tuple 명이 있습니다. tuple는 키 값을 해석, 각 항목에서 키를받은 일단 그냥 ", 키 값에 따라 항목을 정렬 말한다 정렬에 대한 key를 사용하여, 또한 0

에서 을 시작, 정수 키가 일반적으로 "입니다.귀하의 tuple 각각의 시작 항목은 당신과 나에게 날짜처럼 보이기 때문에 마술처럼 일종의 Date 객체가 아닙니다. 그것들은 문자열이고, 그것들은 문자열처럼 비교 될 것입니다.

@tokland는 "주어진 튜플 중 하나를 주어진 코드로 시작 요소를 가져 와서 datetime 모듈을 사용하여 날짜로 변환하는 방법"을 보여줍니다. 그런 다음 키에 대해이 작업을 사용하여 정렬을 호출합니다.

관련 문제