Python: classifique os dicionários aninhados com data e hora como chave [duplicado]

Oct 26 2020

Eu tenho uma lista de dicionários (de dicionários), cada entrada tem um objeto datetime como chave. Como posso classificar isso em termos de chaves?

from datetime import datetime

buffer = [{datetime(2020, 5, 3, 9, 42, 00): {'data': 46, 'id': 'john'}},
          {datetime(2020, 5, 3, 9, 54, 00): {'data': 48, 'id': 'george'}},
          {datetime(2020, 5, 3, 9, 36, 00): {'data': 49, 'id': 'paul'}},
          {datetime(2020, 5, 3, 9, 24, 00): {'data': 51, 'id': 'ringo'}}]

Eu estou atrás disso:

[{datetime(2020, 5, 3, 9, 24, 00): {'data': 51, 'id': 'ringo'}},

{datetime(2020, 5, 3, 9, 36, 00): {'data': 49, 'id': 'paul'}},

{datetime(2020, 5, 3, 9, 42, 00): {'data': 46, 'id': 'john'}},

{datetime(2020, 5, 3, 9, 54, 00): {'data': 48, 'id': 'george'}}]

          

Respostas

3 AndrejKesely Oct 26 2020 at 22:53

Se cada dicionário tiver apenas uma chave:

from pprint import pprint
from datetime import datetime

buffer = [{datetime(2020, 5, 3, 9, 42, 00): {'data': 46, 'id': 'john'}},
          {datetime(2020, 5, 3, 9, 54, 00): {'data': 48, 'id': 'george'}},
          {datetime(2020, 5, 3, 9, 36, 00): {'data': 49, 'id': 'paul'}},
          {datetime(2020, 5, 3, 9, 24, 00): {'data': 51, 'id': 'ringo'}}]

out = sorted(buffer, key=lambda k: list(k)[0])
pprint(out)

Impressões:

[{datetime.datetime(2020, 5, 3, 9, 24): {'data': 51, 'id': 'ringo'}},
 {datetime.datetime(2020, 5, 3, 9, 36): {'data': 49, 'id': 'paul'}},
 {datetime.datetime(2020, 5, 3, 9, 42): {'data': 46, 'id': 'john'}},
 {datetime.datetime(2020, 5, 3, 9, 54): {'data': 48, 'id': 'george'}}]