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
from collections import OrderedDict
od = OrderedDict(
a=0,
b=1,
c=2
)
print(''.join(od))
La sortie attendue est ʻabc`
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
Utilisez *** 3,6! ***