1154 Stimmen

Warum dict.get(Schlüssel) anstelle von dict[Schlüssel]?

Heute bin ich auf die dict Methode get die bei Angabe eines Schlüssels im Wörterbuch den zugehörigen Wert zurückgibt.

Für welchen Zweck ist diese Funktion nützlich? Wenn ich einen Wert finden möchte, der einem Schlüssel in einem Wörterbuch zugeordnet ist, kann ich einfach Folgendes tun dict[key] und erhält dasselbe Ergebnis:

dictionary = {"Name": "Harry", "Age": 17}
dictionary["Name"]
dictionary.get("Name")

5voto

dshanahan Punkte 646

Ein weiterer Anwendungsfall, den ich nicht erwähnt sehe, ist die key Argument für Funktionen wie sorted , max y min . Die get Methode ermöglicht die Rückgabe von Schlüsseln auf der Grundlage ihrer Werte.

>>> ages = {"Harry": 17, "Lucy": 16, "Charlie": 18}
>>> print(sorted(ages, key=ages.get))
['Lucy', 'Harry', 'Charlie']
>>> print(max(ages, key=ages.get))
Charlie
>>> print(min(ages, key=ages.get))
Lucy

Dank dieser Antwort zu einer anderen Frage für die Bereitstellung dieses Anwendungsfalles!

3voto

Raymond Hettinger Punkte 197261

Kurze Antwort

Die eckigen Klammern werden verwendet für Bedingt Suchvorgänge, die mit einer KeyError wenn der Schlüssel fehlt.

En get() Methode wird verwendet von bedingungslos Suchvorgänge, die nie fehlschlagen, weil ein Standardwert angegeben wurde.

Basismethode und Hilfsmethode

Die eckigen Klammern rufen die __getitem__ Methode, die für Mappings wie Dicts grundlegend ist.

En get() Methode ist ein Hilfsmittel, das auf diese Funktionalität aufgesetzt wird. Sie ist eine Abkürzung für das gängige Kodierungsmuster:

try:
    v = d[k]
except KeyError:
    v = default_value

0voto

unjedai Punkte 15

Mit Python 3.8 und später wird das Wörterbuch get() Methode kann mit dem Walross-Operator verwendet werden := in einem Zuordnungsausdruck um den Code weiter zu reduzieren:

if (name := dictonary.get("Name")) is not None
    return name

Verwendung von [] anstelle von get() würde erfordern, den Code in einen try/except-Block zu verpacken und abzufangen KeyError (nicht gezeigt). Und ohne den Walross-Operator bräuchten Sie eine weitere Codezeile:

name = dictionary.get("Name")
if (name is not None)
    return name

-1voto

Boyce Cecil Punkte 39

Damit können Sie einen Standardwert angeben, anstatt eine Fehlermeldung zu erhalten, wenn der Wert nicht gefunden wird. persuedocode wie folgt :

class dictionary():
    def get(self,key,default):
         if self[key] is not found : 
               return default
         else:
               return self[key]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X