pprint Sortierung diktiert, aber nicht gesetzt?

9

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:

%Vor%

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.

    
Stefan Pochmann 10.07.2017, 15:48
quelle

1 Antwort

4

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:

%Vor%

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.

    
Chris_Rands 11.07.2017, 08:07
quelle