# Einführung
Wörterbücher in Python sind für alles nützlich, von Konfigurationen über JSON-Daten bis hin zu API-Antworten. Die meisten Anfänger lernen nur die Grundlagen, wie das Erstellen eines Wörterbuchs, den Zugriff auf einen Schlüssel und das Aktualisieren eines Werts. Das ist es. Wörterbücher haben jedoch noch viel mehr zu bieten. In diesem Artikel gehen wir darauf ein 7 Tipps, die Ihren Code sauberer und pythonischer machen. Additionally, fangen wir an.
# Benutzen .get() Anstelle von () für Lookups
Nehmen wir an, Sie arbeiten mit einem Wörterbuch und müssen auf einen Wert zugreifen. Was aber, wenn der Schlüssel nicht da ist? Nehmen wir an, wir haben ein Konfigurationswörterbuch und Sie versuchen, es auszudrucken "timeout" Schlüssel wie folgt:
config = {"debug": True, "verbose": False}
print(config("timeout"))
Ausgabe:
---------------------------------------------------------------------------
KeyError Traceback (most up-to-date name final)
----> 2 print(config("timeout"))
KeyError: 'timeout'
Dies wird scheitern. Du bekommst ein KeyError Weil "timeout" steht nicht im Wörterbuch. Stattdessen sollten Sie die verwenden .get() Verfahren. Es ist sicherer und Sie können einen Standardwert festlegen, wenn der Schlüssel fehlt.
config = {"debug": True, "verbose": False}
print(config.get("timeout", 30))
Ausgabe:
Dies wird gedruckt 30Dies ist der von uns festgelegte Standardwert. Wenn jedoch ein fehlender Schlüssel ein Fehler ist, verwenden Sie eckige Klammern. In diesem Fall möchten Sie, dass der Fehler sofort angezeigt wird.
# Benutzen defaultdict zum Gruppieren von Daten
Wenn Sie mit einer Liste von Wörtern arbeiten und zählen möchten, wie oft jedes Wort vorkommt, können Sie es wie folgt codieren:
phrases = ("apple", "banana", "apple", "cherry", "banana", "banana")
counts = {}
for phrase in phrases:
if phrase not in counts:
counts(phrase) = 0
counts(phrase) += 1
print(counts)
Ausgabe:
{'apple': 2, 'banana': 3, 'cherry': 1}
Das funktioniert, ist aber etwas ausführlich. Pythons defaultdict macht es sauberer:
from collections import defaultdict
phrases = ("apple", "banana", "apple", "cherry", "banana", "banana")
counts = defaultdict(int)
for phrase in phrases:
counts(phrase) += 1
print(counts)
Ausgabe:
defaultdict(, {'apple': 2, 'banana': 3, 'cherry': 1})
Weil wir es benutzt haben defaultdict(int)Python erstellt automatisch einen Standardwert von 0 immer dann, wenn auf einen fehlenden Schlüssel zugegriffen wird.
# Wörterbücher mit dem zusammenführen | Operator
Im modernen Python ist die sauberste Möglichkeit, Wörterbücher zusammenzuführen, die | Operator.
defaults = {"coloration": "blue", "measurement": "medium"}
overrides = {"measurement": "massive", "weight": "heavy"}
merged = defaults | overrides
print(merged)
Ausgabe:
{'coloration': 'blue', 'measurement': 'massive', 'weight': 'heavy'}
Wenn sich Tasten überlappen, gewinnt das Wörterbuch auf der rechten Seite. Wenn Sie eine direkte Zusammenführung durchführen möchten, können Sie die verwenden |= Operator:
defaults |= overrides
print(defaults)
Ausgabe:
{'coloration': 'blue', 'measurement': 'massive', 'weight': 'heavy'}
# Wörterbücher in Funktionsargumente entpacken
Nehmen wir an, Sie haben eine Funktion und ein Wörterbuch und ihre Felder oder Schlüssel stimmen überein. Anstatt die Schlüssel einzeln weiterzugeben title=knowledge("title"), age=knowledge("age")Sie können alles mit dem übergeben ** Doppel-Sternchen-Operator. Lassen Sie uns eine Benutzerfunktion und einige Dummy-Benutzerdaten erstellen, um sie zu verstehen:
def create_user(title, age, function="viewer"):
return {"title": title, "age": age, "function": function}
user_data = {
"title": "David",
"age": 33
}
# Regular Method
consumer = create_user(
title=user_data("title"),
age=user_data("age"),
function=user_data("function")
)
print(consumer)
Ausgabe:
{'title': 'David', 'age': 33, 'function': 'viewer'}
# Utilizing **
print(create_user(**user_data))
Ausgabe:
{'title': 'David', 'age': 33, 'function': 'viewer'}
Beachten Sie, dass das obige Beispiel „Normaler Weg“ a auslöst >KeyError Weil user_data enthält keine "function" Schlüssel. Der ** Der Entpackansatz greift korrekt auf den Standardwert der Funktion zurück functionDadurch ist es sowohl sauberer als auch robuster.
# Verwendung des Walross-Operators mit Dicts
Python 3.8 führte den Walross-Operator ein (:=), mit dem Sie einen Wert als Teil eines Ausdrucks zuweisen können. Das ist bei Wörterbüchern sehr nützlich.
Nehmen wir an, Sie haben ein Wörterbuch und möchten die Benutzerdaten und deren Namen (falls vorhanden) abrufen. Normalerweise würden Sie es folgendermaßen codieren:
knowledge = {
"consumer": {
"title": "Bryan",
"electronic mail": "bryan@gmail.com"
}
}
if knowledge.get("consumer") is just not None:
consumer = knowledge.get("consumer")
title = consumer.get("title")
print(title)
Ausgabe:
Das funktioniert, aber es wiederholt die gleiche Wörterbuchsuche mehrmals. Sie können es durch den Walross-Operator ersetzen (:=), das den Wert in einem einzigen Schritt sucht und zuweist:
if (consumer := knowledge.get("consumer")) is just not None:
title = consumer.get("title")
print(title)
Ausgabe:
Dies ist besonders hilfreich, wenn Sie mit verschachtelten Wörterbuchstrukturen arbeiten.
# Benutzen TypedDict für strukturierte Daten
Wörterbücher sind flexibel, aber diese Flexibilität kann manchmal zum Downside werden. Zum Beispiel:
def greet(consumer):
return f"Hey, {consumer('title')}!"
consumer = {
"title": "Clair",
"age": "thirty"
}
print(greet(consumer))
Ausgabe:
Dies funktioniert zur Laufzeit, es gibt jedoch ein verstecktes Downside: "age" soll eine Zahl sein, keine Zeichenfolge. Python selbst wird sich nicht beschweren, was später in größeren Projekten zu Fehlern führen kann. TypedDict macht die erwartete Wörterbuchstruktur explizit:
from typing import TypedDict
class UserProfile(TypedDict):
title: str
age: int
def greet(consumer: UserProfile) -> str:
return f"Hey, {consumer('title')}!"
Jetzt mögen Instruments mypy kann Fehler erkennen, bevor der Code ausgeführt wird:
consumer: UserProfile = {
"title": "Clair",
"age": "thirty",
}
print(greet(consumer))
Ausgabe:
check.py:15: error: Incompatible sorts (expression has sort "str", TypedDict merchandise "age" has sort "int") (typeddict-item)
Discovered 1 error in 1 file (checked 1 supply file)
Für eine komplexere Validierung eignen sich Instruments wie dataclasses oder Pydantisch sind oft die bessere Wahl.
# Einfaches Iterieren: .gadgets(), .keys(), .values()
Python-Wörterbücher verfügen über viele integrierte Iterationsmethoden: .gadgets(), .keys()Und .values(). Die meisten Entwickler kennen sie, verwenden sie jedoch nicht so oft, wie sie sollten. Sie könnten ein Wörterbuch wie dieses durchlaufen:
scores = {
"David": 92,
"Bryan": 87,
"Clair": 95
}
for title in scores:
print(title, scores(title))
Ausgabe:
David 92
Bryan 87
Clair 95
Das funktioniert. Dies ist jedoch nicht der beste Weg – es führt bei jedem Durchlauf der Schleife eine zusätzliche Wörterbuchsuche durch. Pythons .gadgets() Methode ist sauberer:
for title, rating in scores.gadgets():
print(title, rating)
Ausgabe:
David 92
Bryan 87
Clair 95
Es gibt sowohl den Schlüssel als auch den Wert zusammen zurück, wodurch wiederholte Suchvorgänge vermieden werden und der Code besser lesbar wird. Wenn Sie nur die Schlüssel benötigen, verwenden Sie .keys() stattdessen. Wenn Sie nur die Werte benötigen, verwenden Sie ebenfalls .values().
# Zusammenfassung
Python-Wörterbücher sehen auf den ersten Blick einfach aus, aber das Erlernen einiger Schlüsselmuster kann Ihren Code viel sauberer machen. Sie können dies verwenden Hyperlink um mehr über die mit Python-Wörterbüchern verbundenen Funktionen zu erfahren. Funktionen wie .get(), defaultdictAuspacken und TypedDict Helfen Sie dabei, sich wiederholenden Code zu reduzieren und Ihre Programme zuverlässiger zu machen.
Kanwal Mehreen ist ein Ingenieur für maschinelles Lernen und ein technischer Redakteur mit einer großen Leidenschaft für Datenwissenschaft und die Schnittstelle zwischen KI und Medizin. Sie ist Mitautorin des E-Books „Maximizing Productiveness with ChatGPT“. Als Google Technology Scholar 2022 für APAC setzt sie sich für Vielfalt und akademische Exzellenz ein. Sie ist außerdem als Teradata Range in Tech Scholar, Mitacs Globalink Analysis Scholar und Harvard WeCode Scholar anerkannt. Kanwal ist ein leidenschaftlicher Verfechter von Veränderungen und hat FEMCodes gegründet, um Frauen in MINT-Bereichen zu stärken.
