2014-08-22 2 views
-1

스프레드 시트에서 읽은 여러 유형의 목록이 있습니다.특정 필드로 다른 값 목록 정렬

>>>data 
[1.0, u'1', u'COMPLETED', u'TONGUE', 30.0, 1.0, '2014/01/28 09:33:16', 30.0, 210.0, u'1 CW', 0.0, 2.0, 210.0, u'H1490'] 
[1.0, u'1', u'COMPLETED', u'TONGUE', 30.0, 1.0, '04/02/2014 09:14:36', 30.0, 230.0, u'2 CCW', 0.0, 7.0, 210.0, u'H990'] 
....... 

나는 여섯 번째 필드 (data[1][6],data[2][6] 등)으로 분류 날짜, 즉 정렬 할 싶습니다. 이 목록을 필드 번호 6으로 정렬하도록 Python에 지시하려면 어떻게해야합니까?

+0

패스 키를 사용 람다 정렬에 또는 정렬 – HuStmpHrrr

+0

@ 압축 된 목록은 내가 묻는 것과 비슷하지 않습니다. – Manolete

+3

일관된 날짜 형식이 없으면 매우 어렵습니다. '04 년 2 월 4 일 '은 '05 년 5 월 5 일'이후 또는 이전입니까? 후자가 2014 년 5 월 1 일인지 2014 년 1 월 5 일인지에 따라 달라집니다. – Kevin

답변

3

당신은 sorted를 사용하고 6 번째 필드를 기준으로 정렬하도록 지정할 수 있습니다 : 두 개의 서로 다른 형식의 전자 당신은 당신의 자신의 기능을 사용할 수 있습니다.

날짜는 구문 분석 dateutil.parser를 사용할 수 있습니다

import dateutil.parser 
sorted(data, key=lambda x: dateutil.parser.parse(x[6])) 

을 적은 룩업 현재 위치에서 데이터를 정렬하고 싶은 경우, 또는 :

from dateutil.parser import parse 
data.sort(key=lambda x: parse(x[6])) 
+0

@Ffisegydd는 문자열에 대해 비슷한 날짜를 반환하고 키로 사용하는 함수를 작성합니다. – x3al

+0

@Ffisegydd 귀하의 의견에 따라 답변을 업데이트했습니다. 감사! – jh314

+0

@ jh314 유용했습니다. 파서를 사용하거나 사전 식으로 정렬 할 수 있습니다. @ _Kevin은 전에 – Manolete

1

사용 sorted 정렬 할 키로 lambda을 사용하고 dateutil :

from dateutil import parser 

sorted(data,key = lambda x:parser.parse(x[6])) 

당신이없는 경우 dateutil 설치 :

pip install python-dateutil 

당신은 장소에 목록을 정렬하려면 및 새 목록을 만들지 마십시오.

data.sort(key=lambda x:parser.parse(x[6])) 

날짜가 켜져 있으면

def date_parse(x): 
    date = None 
    for form in ["%Y/%m/%d %H:%M:%S","%d/%m/%Y %H:%M:%S"]: 
     try: 
      date = datetime.strptime(x,form) 
     except ValueError: 
      pass 
    return date 

sorted(data,key = lambda x: date_parse(x[6]))