[PYTHON] OrderedDict-Konstruktorverhalten

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

Code

from collections import OrderedDict

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

Die erwartete Ausgabe ist "abc"

Ausführungsergebnis

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

Zusammenfassung

Verwenden Sie *** 3.6! ***

Recommended Posts

OrderedDict-Konstruktorverhalten
FTP-Betrieb