Comportement du constructeur OrderedDict

Récemment, lorsque j'ai décidé d'utiliser Ordered Dict pour la première fois depuis longtemps, J'avais en tête que je devais faire attention au comportement du constructeur. Quand j'ai cherché sur Google, j'ai vu de nombreux articles en japonais comme ça, J'ai lu la documentation au cas où, et le comportement a changé dans la version 3.6.

Changed in version 3.6: With the acceptance of PEP 468, order is retained for keyword arguments passed to the OrderedDict constructor and its update() method.

Citation: documentation python3.6

code

from collections import OrderedDict

od = OrderedDict(
    a=0,
    b=1,
    c=2
)
print(''.join(od))

La sortie attendue est ʻabc`

Résultat d'exécution

3.6.2

~/G/B/o/3.6 ❯❯❯ python od_constract.py
abc
~/G/B/o/3.6 ❯❯❯ python od_constract.py
abc
~/G/B/o/3.6 ❯❯❯ python od_constract.py
abc
~/G/B/o/3.6 ❯❯❯ python od_constract.py
abc
~/G/B/o/3.6 ❯❯❯ python od_constract.py
abc

Sortie dans l'ordre de ʻabc`

3.5.3

~/G/B/o/3.5 ❯❯❯ python od_constract.py
cab
~/G/B/o/3.5 ❯❯❯ python od_constract.py
bca
~/G/B/o/3.5 ❯❯❯ python od_constract.py
acb
~/G/B/o/3.5 ❯❯❯ python od_constract.py
abc
~/G/B/o/3.5 ❯❯❯ python od_constract.py
acb

Une séquence autre que ʻabc` est sortie

2.7.13

~/G/B/o/2.7 ❯❯❯ python od_constract.py
acb
~/G/B/o/2.7 ❯❯❯ python od_constract.py
acb
~/G/B/o/2.7 ❯❯❯ python od_constract.py
acb
~/G/B/o/2.7 ❯❯❯ python od_constract.py
acb
~/G/B/o/2.7 ❯❯❯ python od_constract.py
acb

Pour une raison quelconque, il est affiché dans l'ordre de ʻacb`

The OrderedDict constructor and update() method both accept keyword arguments, but their order is lost because Python’s function call semantics pass-in keyword arguments using a regular unordered dictionary.

Citation: documentation python2.7

Résumé

Utilisez *** 3,6! ***

Recommended Posts

Comportement du constructeur OrderedDict
Fonctionnement FTP