Python-Array mit String-Indizes

73

Ist es möglich, Strings als Indizes in einem Array in Python zu verwenden?

Zum Beispiel:

myArray = []
myArray["john"] = "johns value"
myArray["jeff"] = "jeffs value"
print myArray["john"]
Petey B.
quelle
9
Was Sie anzeigen, sind Listen , keine Arrays. Nenn mich pedantisch.
Aaronasterling

Antworten:

155

Was Sie wollen, wird als assoziatives Array bezeichnet . In Python werden diese Wörterbücher genannt .

Wörterbücher werden manchmal in anderen Sprachen als "assoziative Erinnerungen" oder "assoziative Arrays" gefunden. Im Gegensatz zu Sequenzen, die durch eine Reihe von Zahlen indiziert sind , werden Wörterbücher durch Schlüssel indiziert, die einen beliebigen unveränderlichen Typ haben können . Zeichenfolgen und Zahlen können immer Schlüssel sein.

myDict = {}
myDict["john"] = "johns value"
myDict["jeff"] = "jeffs value"

Alternative Möglichkeit, das obige Diktat zu erstellen:

myDict = {"john": "johns value", "jeff": "jeffs value"}

Zugriff auf Werte:

print(myDict["jeff"]) # => "jeffs value"

Abrufen der Schlüssel (in Python v2):

print(myDict.keys()) # => ["john", "jeff"]

In Python 3 erhalten Sie dict_keyseine Ansicht, die etwas effizienter ist ( Details finden Sie in den Ansichtsdokumenten und in PEP 3106 ).

print(myDict.keys()) # => dict_keys(['john', 'jeff']) 

Wenn Sie mehr über Python-Wörterbuch-Interna erfahren möchten, empfehle ich diese ca. 25-minütige Videopräsentation: https://www.youtube.com/watch?v=C4Kc8xzcA68 . Es heißt "The Mighty Dictionary".

miku
quelle
4
Tolles Beispiel. Über Wörterbücher in Python ist es immer gut zu wissen , dass der Schlüssel , wie The MYYN sagte, von einem unveränderlichen Typ sein muss. Wenn Sie Werte jemals mit "mehreren" Schlüsseln kategorisieren müssen, müssen Sie den Tupel-Typ in Python verwenden.
Sean
1
Technisch gesehen muss der Schlüssel [muss hashbar sein ] ( docs.python.org/reference/datamodel.html#object.__hash__ ) nicht unbedingt unveränderlich sein, obwohl sich der von der hashFunktion zurückgegebene Wert nicht ändern sollte, solange das Objekt als verwendet wird Wörterbuchschlüssel. Wenn dies der Fall ist, sollten Sie darauf vorbereitet sein, dass Ihr Programm abstürzt oder sich auf bizarre Weise schlecht verhält.
David Z
Oben The Mighty Dictionary URL funktioniert nicht, finden Sie unter youtube.com/watch?v=C4Kc8xzcA68
Mallikarjunarao Kosuri
Das ist super toll. Eigentlich was ich brauche.
Faris Rayhan
4

Versuchen Sie noch besser ein OrderedDict Sie es (vorausgesetzt, Sie möchten so etwas wie eine Liste). Näher an einer Liste als an einem normalen Diktat, da die Schlüssel eine Reihenfolge haben, genau wie Listenelemente eine Reihenfolge haben. Bei einem regulären Diktat haben die Schlüssel eine beliebige Reihenfolge.

Beachten Sie, dass dies in Python 3 und 2.7 verfügbar ist. Wenn Sie eine frühere Version von Python verwenden möchten, finden Sie hierfür installierbare Module.

gaefan
quelle
Beachten Sie, dass die Notwendigkeit eines OrderedDict viel seltener ist als die Notwendigkeit eines Diktats.
Mike Graham