我有一个如下所示的dicts列表:
[{"SMID": 45889, "IRR": 1.23, "EffectiveDate": '1990-06-30', "PreviousDate": '1990-05-30', 'LastPrice': 100 },
{"SMID": 45889, "IRR": 4.33, "EffectiveDate": '1990-07-30', "PreviousDate": '1990-06-30', 'LastPrice': 103 },
{"SMID": 45889, "IRR": 5.25, "EffectiveDate": '1990-08-30', "PreviousDate": '1990-07-30', 'LastPrice': 110 },
{"SMID": 45889, "IRR": 5.28, "EffectiveDate": '1990-09-30', "PreviousDate": '1990-08-30', 'LastPrice': 111 },
{"SMID": 45889, "IRR": 3.73, "EffectiveDate": '1990-03-30', "PreviousDate": '1990-09-30', 'LastPrice': 123 }]
我想弄清楚按日期对它们进行排序的方法(我知道它们已经在这里排序了)。我正在研究OrderedDicts,但这只是跟踪了如何插入dicts。有人有主意吗?
发布于 2018-12-14 10:01:40
这个问题已经回答了好几次,你唯一想要弄清楚自己的部分就是把dates string变成可比的东西。这里有两种方法,字面上是建议注释的修改版本。
x = [{"SMID": 45889, "IRR": 1.23, "EffectiveDate": '1992-06-30', "PreviousDate": '1990-05-30', 'LastPrice': 100 },
{"SMID": 45889, "IRR": 4.33, "EffectiveDate": '1990-07-30', "PreviousDate": '1990-06-30', 'LastPrice': 103 },
{"SMID": 45889, "IRR": 5.25, "EffectiveDate": '1990-08-30', "PreviousDate": '1990-07-30', 'LastPrice': 110 },
{"SMID": 45889, "IRR": 5.28, "EffectiveDate": '1990-09-30', "PreviousDate": '1990-08-30', 'LastPrice': 111 },
{"SMID": 45889, "IRR": 3.73, "EffectiveDate": '1990-03-30', "PreviousDate": '1990-09-30', 'LastPrice': 123 }]
1)使用datetime模块构建datetime对象
from datetime import datetime
sorted_x = sorted(x, key=lambda val:datetime.strptime((val['EffectiveDate']), '%Y-%M-%d'))
2)或者使用dateutil模块(它不是标准库的一部分,如@ Delirious Lettuce所述。但它是一种快速将字符串转换为日期对象的便捷方式。
from dateutil import parser
sorted_x = sorted(x, key=lambda val:parser.parse(val['EffectiveDate']))
https://stackoverflow.com/questions/-100003068
复制相似问题