2017-01-30 1 views
0

다음 데이터를 날짜와 시간순으로 정렬하고 싶습니다.파이썬에서 날짜와 시간으로 사전 값 목록 정렬

{'TID': 'B1', 'sno': '2', 'datetime': '04-13-12 17:21:18:83'} 
{'TID': 'A1', 'sno': '4', 'datetime': '11-17-12 22:50:59:30'} 
{'TID': 'A2', 'sno': '3', 'datetime': '11-17-12 22:51:00:66'} 
{'TID': 'B6', 'sno': '2', 'datetime': '10-28-12 07:26:02:19'} 
{'TID': 'B0', 'sno': '8', 'datetime': '02-26-16 08:13:01:30'} 
{'TID': 'B4', 'sno': '8', 'datetime': '02-26-16 08:13:02:43'} 
{'TID': 'C1', 'sno': '9', 'datetime': '03-08-15 17:12:55:81'} 
{'TID': 'A2', 'sno': '23', 'datetime': '03-08-15 17:31:31:12'} 

솔루션은 나를 위해 작동하지 않습니다 herehere을 제안했다.

여기
mylist=[] 
with open(path+outfile) as fid: 
    for line in fid: 
     mylist.append(eval(line)) 


from operator import itemgetter 
newlist = sorted(mylist, key=itemgetter('datetime')) 
for item in newlist: 
    print(str(item)) 

위의 코드의 출력입니다 : 당신이 발견하는 경우

{'sno': '8', 'TID': 'B0', 'datetime': '02-26-16 08:13:01:30'} 
{'sno': '8', 'TID': 'B4', 'datetime': '02-26-16 08:13:02:43'} 
{'sno': '9', 'TID': 'C1', 'datetime': '03-08-15 17:12:55:81'} 
{'sno': '23', 'TID': 'A2', 'datetime': '03-08-15 17:31:31:12'} 
{'sno': '2', 'TID': 'B1', 'datetime': '04-13-12 17:21:18:83'} 
{'sno': '2', 'TID': 'B6', 'datetime': '10-28-12 07:26:02:19'} 
{'sno': '4', 'TID': 'A1', 'datetime': '11-17-12 22:50:59:30'} 
{'sno': '3', 'TID': 'A2', 'datetime': '11-17-12 22:51:00:66'} 

, 위의 출력은 날짜와 시간으로 분류되지

희는 내 코드입니다.

+0

''이 표기법 04-13-12 17 83' 무엇된다 : 21 : 18 : 83'? – RomanPerekhrest

+1

'datetime'값이 제대로 수행 되었다면 다른 해결책이 효과가 있습니다. –

+1

정렬 방법이 표시되지 않습니다. 사전 순으로 정렬됩니다. 문제는 몇 개월 전에 처음으로 날짜를 파싱해야한다는 것입니다. –

답변

2

날짜가 월 - 일 - 연도이기 때문에 영숫자 정렬이 여기서 작동하지 않습니다. 그것이 제대로 작동하려면 년 - 월 - 일이어야합니다. 내가 날짜 요소를 분리 및 재 구축하는 도우미 함수를 정의 tuple 그래서 자연 튜플 정렬 날짜 정렬 일치합니다

def sortable_date(x): 
    d,t = x['datetime'].split() 
    dtoks = d.split('-') 
    #  year  month day  time 
    return (dtoks[2],dtoks[0],dtoks[1],t) 

result = sorted(data,key=sortable_date) 

또 다른 가능성은 다음과 같이 해석 날짜에 따라 분류하는 것입니다 :

result = sorted(data,key=lambda x : time.strptime(x['datetime'],"%m-%d-%y %H:%M:%S:%f")) 

데이터와 함께 내가 얻을 :

{'TID': 'B1', 'datetime': '04-13-12 17:21:18:83', 'sno': '2'} 
{'TID': 'B6', 'datetime': '10-28-12 07:26:02:19', 'sno': '2'} 
{'TID': 'A1', 'datetime': '11-17-12 22:50:59:30', 'sno': '4'} 
{'TID': 'A2', 'datetime': '11-17-12 22:51:00:66', 'sno': '3'} 
{'TID': 'C1', 'datetime': '03-08-15 17:12:55:81', 'sno': '9'} 
{'TID': 'A2', 'datetime': '03-08-15 17:31:31:12', 'sno': '23'} 
{'TID': 'B0', 'datetime': '02-26-16 08:13:01:30', 'sno': '8'} 
{'TID': 'B4', 'datetime': '02-26-16 08:13:02:43', 'sno': '8'} 
+0

나는 dateutil에 의존하고 있었지만 나를 실패했다 : D – MYGz

+0

그 시간 형식은 끔찍하다. –

2
당신은 날짜 추출하고 분석하는 자신의 키 기능을 쓸 수 있습니다

:

를 515,
import datetime 
from operator import itemgetter 

mylist = [{'TID': 'B1', 'sno': '2', 'datetime': '04-13-12 17:21:18:83'}, 
{'TID': 'A1', 'sno': '4', 'datetime': '11-17-12 22:50:59:30'}, 
{'TID': 'A2', 'sno': '3', 'datetime': '11-17-12 22:51:00:66'}, 
{'TID': 'B6', 'sno': '2', 'datetime': '10-28-12 07:26:02:19'}, 
{'TID': 'B0', 'sno': '8', 'datetime': '02-26-16 08:13:01:30'}, 
{'TID': 'B4', 'sno': '8', 'datetime': '02-26-16 08:13:02:43'}, 
{'TID': 'C1', 'sno': '9', 'datetime': '03-08-15 17:12:55:81'}, 
{'TID': 'A2', 'sno': '23', 'datetime': '03-08-15 17:31:31:12'}] 

def key_function(item_dictionary): 
    '''Extract datetime string from given dictionary, and return the parsed datetime object''' 
    datetime_string = item_dictionary['datetime'] 
    return datetime.datetime.strptime(datetime_string, '%m-%d-%y %H:%M:%S:%f') 

mylist.sort(key=key_function) 

결과 :

[{'TID': 'B1', 'datetime': '04-13-12 17:21:18:83', 'sno': '2'}, 
{'TID': 'B6', 'datetime': '10-28-12 07:26:02:19', 'sno': '2'}, 
{'TID': 'A1', 'datetime': '11-17-12 22:50:59:30', 'sno': '4'}, 
{'TID': 'A2', 'datetime': '11-17-12 22:51:00:66', 'sno': '3'}, 
{'TID': 'C1', 'datetime': '03-08-15 17:12:55:81', 'sno': '9'}, 
{'TID': 'A2', 'datetime': '03-08-15 17:31:31:12', 'sno': '23'}, 
{'TID': 'B0', 'datetime': '02-26-16 08:13:01:30', 'sno': '8'}, 
{'TID': 'B4', 'datetime': '02-26-16 08:13:02:43', 'sno': '8'}] 
관련 문제