Ich weiß, dass dicts und sets nicht geordnet sind, also können gleiche sets oder dicts anders gedruckt werden (alle Tests mit Python 3.6.1):
%Vor% Und ich habe gerade festgestellt, dass pprint
("pretty-print") dicts sortiert, aber nicht Sätze:
In der Dokumentation heißt es auch "Wörterbücher werden nach Schlüssel sortiert, bevor die Anzeige berechnet wird" . Aber warum sortiert er nicht auch Sets? Sieht mir nicht gut aus. Und gibt es eine Möglichkeit, Sortiersets zu erstellen ? Auch in verschachtelten Strukturen, wie dies der Hauptzweck von pprint
ist.
Dies wurde in Ausgabe 27495 angesprochen und es ist ein Fehler, anstatt nur eine Design-Wahl, aber anscheinend wurde noch nicht gelöst.
Hier ist ein weiteres Beispiel aus dem Problem, das vielleicht deutlicher das Verhalten zeigt, das Sie in Python 3 identifizieren:
%Vor%
Dies gilt auch für frozenset()
, aber beachten Sie, dass mehrzeilige pprint
Ausgaben in Python 3 sortiert sind, zum Beispiel
%Vor%
In Python 2 ist jedoch die Ausgabe desselben Originalcodes sortiert:
%Vor%
Ich denke, es ist die Inkonsistenz zwischen Python 3 und Python 2 und zwischen dem einzeiligen mehrzeiligen Verhalten, das dies zu einem Bug macht.
Für dict
s veranschaulicht ein ähnliches Beispiel, wie Sie feststellen, dass die Ausgabe entweder in Python 3 oder 2 wie folgt sortiert ist:
Jedoch könnte es für Python 3.6 als überraschend angesehen werden, dass pprint
sort dict
s ist, da sie sind jetzt bestellt . Da dies jedoch nur ein Implementierungsdetail ist (vorerst), denke ich, dass pprint
nicht verpflichtet ist, die Insertionsreihenfolge (noch) beizubehalten, und dies würde pprint
's eigene Konsistenz in Python-Versionen von immer sortieren verändern dict
s.
Tags und Links python python-3.x dictionary set pprint