Als ich mich vor kurzem entschied, Ordered Dict zum ersten Mal seit langer Zeit wieder zu verwenden, Ich hatte vor, dass ich auf das Verhalten des Konstruktors achten musste. Als ich googelte, sah ich viele Artikel auf Japanisch. Ich habe die Dokumentation für alle Fälle gelesen und das Verhalten in 3.6 geändert.
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.
Zitat: python3.6-Dokumentation
from collections import OrderedDict
od = OrderedDict(
a=0,
b=1,
c=2
)
print(''.join(od))
Die erwartete Ausgabe ist "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
Ausgabe in der Reihenfolge "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
Eine andere Sequenz als "abc" wird ausgegeben
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
Aus irgendeinem Grund wird es in der Reihenfolge "acb" ausgegeben
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.
Zitat: python2.7-Dokumentation
Verwenden Sie *** 3.6! ***