Heim  >  Artikel  >  Backend-Entwicklung  >  Warum unterscheidet sich die Reihenfolge der Schlüssel in meiner JSON-Ausgabe von der Reihenfolge in meinem Python-Wörterbuch, das „json.dumps“ verwendet?

Warum unterscheidet sich die Reihenfolge der Schlüssel in meiner JSON-Ausgabe von der Reihenfolge in meinem Python-Wörterbuch, das „json.dumps“ verwendet?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 21:08:01779Durchsuche

Why is the order of keys in my JSON output different from the order in my Python dictionary using `json.dumps`?

Out-of-Order-Elemente in JSON-Objekten mit „json.dumps“?

In Ihrem Code verwenden Sie „json .dumps“, um eine Liste von Wörterbüchern in JSON zu konvertieren. Sie haben jedoch festgestellt, dass die Reihenfolge der Schlüssel in den einzelnen Wörterbüchern nicht den Erwartungen entspricht. Insbesondere müssen die Schlüssel in der Reihenfolge „id“, „name“ und „timezone“ erscheinen.

Begründung

Beide Python-Wörterbücher (vor Python 3.7) und JSON-Objekte sind ungeordnete Sammlungen. Dies bedeutet, dass die Reihenfolge der Schlüssel in einem Wörterbuch oder JSON-Objekt nicht garantiert ist.

Lösung 1: Schlüssel sortieren

Sie können den Parameter „sort_keys“ von verwenden „json.dumps“, um die Schlüssel im Ausgabe-JSON zu sortieren. Zum Beispiel:

<code class="python">import json

countries.append({"id":row.id,"name":row.name,"timezone":row.timezone})
print(json.dumps(countries, sort_keys=True))</code>

Dadurch wird JSON mit den Schlüsseln in der folgenden Reihenfolge ausgegeben:

[
   {"id": 1, "name": "Mauritius", "timezone": 4}, 
   {"id": 2, "name": "France", "timezone": 2}, 
   {"id": 3, "name": "England", "timezone": 1}, 
   {"id": 4, "name": "USA", "timezone": -4}
]

Lösung 2: OrderedDict verwenden

Wenn Sie eine bestimmte Reihenfolge für die Schlüssel benötigen, können Sie die Klasse „collections.OrderedDict“ verwenden. OrderedDict behält die Reihenfolge der darin eingefügten Schlüssel bei. Zum Beispiel:

<code class="python">from collections import OrderedDict

countries_by_id = OrderedDict()
countries_by_id["id"] = row.id
countries_by_id["name"] = row.name
countries_by_id["timezone"] = row.timezone

print(json.dumps(countries_by_id))</code>

Dadurch wird JSON mit den Schlüsseln in der Reihenfolge „id“, „name“ und „timezone“ ausgegeben.

Zusätzlicher Hinweis

In Python 3.6 und höher wird die Reihenfolge der Schlüsselwortargumente in Wörterbüchern beibehalten. Dies bedeutet, dass Sie das gleiche Ergebnis wie mit OrderedDict erzielen können, indem Sie beim Erstellen des Wörterbuchs einfach die Schlüssel in der gewünschten Reihenfolge angeben:

<code class="python">countries = {"id": row.id, "name": row.name, "timezone": row.timezone}</code>

Dadurch bleibt die Reihenfolge der Schlüssel im Ausgabe-JSON automatisch erhalten.

Das obige ist der detaillierte Inhalt vonWarum unterscheidet sich die Reihenfolge der Schlüssel in meiner JSON-Ausgabe von der Reihenfolge in meinem Python-Wörterbuch, das „json.dumps“ verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn