HOWTO · Python
Array oder Liste von Dictionaries in Python
Dieses Tutorial zeigt, wie Sie ein Array von Dictionaries in Python erstellen
Auf dieser Seite
Eine Python-Liste ist der übliche Container für eine Sammlung von Dictionaries: Jedes Listenelement kann einen Datensatz aus Schlüssel-Wert-Paaren enthalten. Obwohl manchmal von einem Array aus Dictionaries die Rede ist, sind Python-Listen und spezialisierte Array-Typen unterschiedliche Dinge. Die folgenden Beispiele zeigen, wie du die Liste erstellst, Datensätze und Werte ausliest, einen Datensatz anhängst und einen Wert aktualisierst.
Eine Liste aus Dictionaries in Python erstellen
Schreibe jedes Dictionary als Element in ein Listenliteral. Jedes Literal erstellt ein eigenes Dictionary. Deshalb können die Datensätze unterschiedliche Schlüssel haben oder einige Schlüssel gemeinsam nutzen. Verwende einen aussagekräftigen Variablennamen wie records; list ist bereits der Name eines Python-Built-ins.
Führe dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
records = [
{"name": "Ada", "role": "engineer"},
{"name": "Lin", "role": "designer"},
]
print(records)
[{'name': 'Ada', 'role': 'engineer'}, {'name': 'Lin', 'role': 'designer'}]
Auf ein Dictionary und seine Werte über Index und Schlüssel zugreifen
Die Indizes einer Python-Liste beginnen bei 0; Index 1 wählt also das zweite Dictionary aus. Um ein Feld auszulesen, wählst du zuerst das Dictionary über seinen Listenindex aus und greifst dann mit dem Schlüssel in eckigen Klammern auf den Wert zu. Die Listen- und Dictionary-Zugriffe sind zwei Schritte in einem Ausdruck.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
records = [
{"name": "Ada", "role": "engineer"},
{"name": "Lin", "role": "designer"},
]
second_record = records[1]
role = records[1]["role"]
print(second_record)
print(role)
{'name': 'Lin', 'role': 'designer'}
designer
Der Schlüssel muss im ausgewählten Dictionary vorhanden sein, damit der Zugriff mit eckigen Klammern funktioniert. Wenn ein Schlüssel fehlen kann, verwende record.get("role"), um standardmäßig None zurückzugeben, oder gib einen Ersatzwert an, zum Beispiel record.get("role", "unknown").
Ein Dictionary an eine Liste anhängen
Rufe append() auf, um ein Dictionary am Ende der bestehenden Liste hinzuzufügen. Die Methode verändert die Liste direkt; sie erstellt keine neue Liste.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
records = [{"name": "Ada", "role": "engineer"}]
records.append({"name": "Lin", "role": "designer"})
print(records)
[{'name': 'Ada', 'role': 'engineer'}, {'name': 'Lin', 'role': 'designer'}]
Ein Dictionary in der Liste aktualisieren
Wähle einen Datensatz über seinen Index aus und weise anschließend über einen Schlüssel einen neuen Wert zu. Ist der Schlüssel noch nicht vorhanden, wird er durch die Zuweisung hinzugefügt. Mit dieser Syntax kannst du also entweder den Wert eines vorhandenen Feldes ersetzen oder ein Feld ergänzen.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
records = [{"name": "Ada", "role": "engineer"}]
records[0]["role"] = "lead engineer"
records[0]["team"] = "platform"
print(records)
[{'name': 'Ada', 'role': 'lead engineer', 'team': 'platform'}]
Eine Liste aus Dictionaries mit einer List Comprehension erstellen
Eine List Comprehension ist praktisch und knapp, wenn jeder Datensatz demselben Muster folgt. Setze ein Dictionary-Literal in den Ausdruck, damit bei jedem Durchlauf ein eigenes Dictionary entsteht. Das folgende Beispiel erstellt vier separate Dictionaries mit denselben Anfangsfeldern:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
records = [{"active": True, "score": 0} for _ in range(4)]
print(records)
[{'active': True, 'score': 0}, {'active': True, 'score': 0}, {'active': True, 'score': 0}, {'active': True, 'score': 0}]
Wenn du stattdessen mehrere leere Dictionaries erstellen möchtest, rufe bei jedem Durchlauf dict() auf:
records = [dict() for _ in range(3)]
print(records)
[{}, {}, {}]
Eine Comprehension kann Feldwerte auch aus einem iterierbaren Objekt ableiten:
records = [{"id": number, "label": f"item-{number}"} for number in range(3)]
print(records)
[{'id': 0, 'label': 'item-0'}, {'id': 1, 'label': 'item-1'}, {'id': 2, 'label': 'item-2'}]
Multipliziere keine Liste mit einem einzelnen veränderbaren Dictionary, um mehrere Datensätze zu erzeugen. Zum Beispiel wiederholt [{}] * 3 Verweise auf dasselbe Dictionary. Eine Änderung an einem Element ist daher an allen drei Positionen sichtbar. Eine Comprehension mit {} erstellt dagegen bei jedem Durchlauf ein neues Dictionary.
Dictionaries in einer Schleife erstellen
Verwende eine Schleife, wenn jedes Dictionary mehrere Schritte oder bedingte Felder benötigt. Erstelle bei jedem Durchlauf ein neues Dictionary und hänge es anschließend an die Liste an.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
records = []
for number in range(3):
record = {"id": number, "score": number * 10}
records.append(record)
for record in records:
print(record)
{'id': 0, 'score': 0}
{'id': 1, 'score': 10}
{'id': 2, 'score': 20}
Bei jedem Schleifendurchlauf wird hier mithilfe des aktuellen Werts von number ein Datensatz erstellt. append() speichert dieses Dictionary in der Liste, bevor der nächste Durchlauf beginnt.
Dictionaries mit dem Konstruktor dict() erstellen
Der Konstruktor dict() erstellt ohne Argumente ein leeres Dictionary oder mit benannten Feldern ein Dictionary. Die Namen der benannten Argumente werden zu Zeichenfolgen als Schlüssel:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
blank_record = dict()
person = dict(name="John", age=30, city="New York")
print(blank_record)
print(person)
{}
{'name': 'John', 'age': 30, 'city': 'New York'}
Mit getrennten Aufrufen von dict() kannst du Dictionaries in einer Liste erstellen:
records = [
dict(name="Ada", role="engineer"),
dict(name="Lin", role="designer"),
]
for record in records:
print(record)
{'name': 'Ada', 'role': 'engineer'}
{'name': 'Lin', 'role': 'designer'}
Dictionary-Schlüssel müssen hashbar sein. Dazu gehören Zeichenfolgen, Zahlen und Tupel aus hashbaren Werten; veränderbare Typen wie Listen können keine Schlüssel sein. Jeder Schlüssel kommt in einem Dictionary höchstens einmal vor. Wird ein Dictionary aus wiederholten Schlüssel-Wert-Paaren erstellt, ersetzt der spätere Wert den früheren. Bei benannten Argumenten für dict() darf jeder Argumentname nur einmal im Aufruf vorkommen. Wenn die Eingabe wiederholte Schlüssel enthalten kann, verwende daher eine Zuordnung oder eine Folge von Paaren.