0

私が理解しているように、次の結果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'}]})
])

ここで見逃している注意事項は何ですか?

4

1 に答える 1

1

時系列ではない方法でソートしたい場合は、ソートしたい属性にアクセスして、タプルソートを使用できます。

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'}]})])
于 2021-10-20T22:52:49.900 に答える