Python: trier les dictionnaires imbriqués avec datetime comme clé [dupliquer]

Oct 26 2020

J'ai une liste de dictionnaires (de dictionnaires), chaque entrée a un objet datetime comme clé. Comment puis-je trier cela en termes de clés?

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'}}]

Je suis après ça:

[{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'}}]

          

Réponses

3 AndrejKesely Oct 26 2020 at 22:53

Si chaque dictionnaire n'a qu'une seule clé:

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)

Impressions:

[{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'}}]