Puisqu'en CPython 3.6 dicts sont commandés (je sais que ce n'est pas garanti - mais génial à utiliser), donc je me attendais la compréhension dict suivante pour préserver l'ordre:CPython 3.6 pour dict dans la compréhension dict
# attempt to get only specific k:v from dict jrn_blocks in order
jrn_blocks = {"header":0, "open":1, "detached":2, "rps_command":3, "close_no_save":4}
recip = "header,open,close_no_save"
{k: v for k, v in jrn_blocks.items() if k in recip}
# -> gives me: {'close_no_save': 4, 'header': 0, 'open': 1}
# -> I would expect: {'header': 0, 'open': 1, 'close_no_save': 4}
Si Je viens d'utiliser une compréhension de la liste tuples d'objets, ordre est conservé:
[(k, v) for k, v in jrn_blocks.items() if k in recip]
# -> gives me: [('header', 0), ('open', 1), ('close_no_save', 4)]
dès que je tente de créer un dictionnaire de ces tuples, l'ordre est perdu à nouveau:
dict([(k, v) for k, v in jrn_blocks.items() if k in recip])
# -> gives me: {'close_no_save': 4, 'header': 0, 'open': 1}
Est-ce que ce comportement est attendu?
Y a-t-il un tri alphabétique des clés en arrière-plan?
Ou y a-t-il une autre façon élégante de faire ce genre de "filtre dict" tout en préservant l'ordre?
Merci beaucoup d'avance!