【发布时间】:2021-12-07 17:44:18
【问题描述】:
据我了解,下面的结果应该是一个 OrderedDict 对象,其中的项目按键排序,这是一个日期时间对象。
ledger = OrderedDict(
sorted(ledger.items(), key=lambda x: datetime.strftime(x[0], '%d-%m-%Y'))
)
但是,在我的情况下,对象被无序排序:
OrderedDict([
(datetime.date(2021, 10, 1), {'net': -33924, 'entries': [{'text': 'Applied to 102101', 'amount': -16962, 'mode': 'debit'}, {'text': 'Applied to 102104', 'amount': -16962, 'mode': 'debit'}]}),
(datetime.date(2021, 11, 3), {'net': -96118, 'entries': [{'text': 'Applied to 102104', 'amount': -96118, 'mode': 'debit'}]}),
(datetime.date(2021, 9, 24), {'net': 18000.0, 'entries': [{'text': 'Payment Received', 'amount': 18000.0, 'mode': 'credit'}]})
])
我在这里遗漏了哪些注意事项?
【问题讨论】:
-
您首先按月份排序
-
这可能是由于您的排序键是按
str对象而不是数值排序的。 -
可以对日期时间对象进行排序,如果您只是删除键将其转换为排序不好的字符串,它就不能正常工作吗?
-
为什么要将日期对象格式化为字符串?
-
以后请提供minimal reproducible example。看起来 dict 方面在这里无关紧要,您可以使用简单的日期列表重现相同的问题:
sorted(dates, key=lambda x: x.strftime('%d-%m-%Y'))。它还有助于获得预期的输出以避免像 ddejohn 的回答中那样混淆,以及避免在datetime和datetime.datetime之间混淆的导入。
标签: python python-datetime ordereddict