在python中按日期和时间对字典值列表进行排序
我想按日期和时间对以下数据进行排序在python中按日期和时间对字典值列表进行排序,python,sorting,Python,Sorting,我想按日期和时间对以下数据进行排序 {'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-1
{'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'}
已提出解决方案,但不适用于我
Hee是我的代码:
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'}
如果您注意到,上面的输出没有按日期和时间排序。字母数字排序在这里不起作用,因为日期是年月日。为了让它正常工作,它应该是年-月-日。我定义了一个helper函数来拆分日期元素并重建元组,以便自然元组排序与日期排序匹配:
{'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 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'}
字母数字排序在这里不起作用,因为日期是年月日。为了让它正常工作,它应该是年-月-日。我定义了一个helper函数来拆分日期元素并重建元组,以便自然元组排序与日期排序匹配:
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'}
您可以编写自己的键函数来提取和解析日期时间:
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'}]
您可以编写自己的键函数来提取和解析日期时间:
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'}]
这个符号04-13-12 17:21:18:83中的83是什么?如果datetime值处理正确,那么其他解决方案也可以。我不知道它是如何排序的。它是按字母顺序排序的。问题是:你先有几个月,所以你需要先解析日期。@Jean-franoisfabre。我是python新手。你能帮我做一下吗?@chandresh你最好把你的数据修好。这个符号中的83是什么04-13-12 17:21:18:83?如果你的日期时间值做得好,另一个解决方案就行了。我不知道它是怎么分类的。它是按字母顺序排序的。问题是:你先有几个月,所以你需要先解析日期。@Jean-franoisfabre。我是python新手。你能帮我吗?@chandresh你最好修复你的数据。我依赖dateutil,但失败了:DI依赖dateutil,但失败了:d