python - OrderedDict 排序不正确
问题描述
据我了解,以下应该产生一个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'}]})
])
我在这里缺少什么警告?
解决方案
如果您想以某种不按时间顺序排列的方式进行排序,您可以访问要排序的属性并使用元组排序:
sorted(datetimes, key=lambda d: (d.month, d.seconds)) # or some other weird sorting
但是,如果它只是按时间顺序排序,那么您无需为以下任何事情烦恼:
In [3]: OrderedDict(sorted(ledger.items()))
Out[3]:
OrderedDict([(datetime.date(2021, 9, 24),
{'net': 18000.0,
'entries': [{'text': 'Payment Received',
'amount': 18000.0,
'mode': 'credit'}]}),
(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'}]})])
推荐阅读
- html - 我在 html 预览中看不到图像 (2021)
- c - 神秘双指针赋值的解释
- android - Android View Binding问题,公共类名和文件名不同
- python - 在 Python 中使用用户输入作为变量
- google-sheets - 如何解决“读取请求限制错误”?
- python - 如何将正则表达式中的任何内容匹配到一个字符而不包括它?
- javascript - 如何在外部文件中使用 Vue 指令并导入组件?
- docker - 安装路径无效:“db”安装路径必须是绝对的
- c - c代码:结构及其字段的语法错误
- algorithm - 如何按小时对过去 24 小时的时间戳进行分组?