Zugriff auf Elemente von Python-dictionary-index
Betrachten ein dict wie
mydict = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'} }
Wie gelange ich zum Beispiel ein bestimmtes element dieses Wörterbuch?
zum Beispiel möchte ich auf drucken, um das erste element nach einigen Formatierung das erste element von Apple, die in unserem Fall ist 'American' nur?
Zusätzliche Informationen
Die oben genannten Daten Struktur geschaffen, die durch analysieren eines Eingangs-Datei in eine python-Funktion. Einmal erstellt, jedoch bleibt es das gleiche für diesen Lauf.
Ich bin mit dieser Datenstruktur in meiner Funktion.
Also, wenn die Datei-änderungen, das nächste mal, wenn dieses Programm ausgeführt wird, den Inhalt der Datei unterschiedlich sind und daher der Inhalt dieser Datenstruktur wird unterschiedlich sein, aber das format wäre die gleiche.
Sie sehen also, ich in meiner Funktion weiß ich nicht, dass das erste element in Apple 'American' oder etwas anderes, damit kann ich nicht direkt verwenden, 'American', die als Schlüssel.
- Können Sie bitte geben Sie ein Beispiel der Ausgabe, die Sie erwarten?
- Was tun Sie eigentlich tun möchten, mit dieser Struktur? Und wissen Sie, der Schlüssel, der das dict - ('Apple' und 'Trauben' in deinem Beispiel)? Oder wollen Sie nur wissen, dass Sie sich ein dict von dicts?
- Rufen Sie nicht Ihr Wörterbuch
dict
. Das Wort 'dict' ist bereits ein Schlüsselwort in Python. Verwenden Sie etwas anderes, wiemydict
. - Hinweis: Diese Frage ist über den Zugriff auf dict-Elemente, die durch den index, das macht keinen Sinn, denn dicts sind ungeordnet. Für eine Frage über den Zugriff auf Elemente in einem verschachtelten dict, siehe Python - Zugriff auf Werte verschachtelten dictionaries.
- ungeordnete Dinge haben eine intrinsische Ordnung. Ungeordnete != keine Ordnung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegeben, dass es ein Wörterbuch, das Sie darauf zugreifen, indem Sie mithilfe der Tasten ein. Immer das Wörterbuch abgelegt unter "Apple", tun Sie den folgenden:
Und immer, wie viele von Ihnen sind Amerikaner (16), wie das tun:
.keys()
so können Sie dynamisch."n"
auf eine unbekannte Tiefe, gespeichert in einem unbekannten element.Wenn die Fragen ist, wenn ich weiß, dass ich ein dict von dicts mit 'Apple', wie eine Frucht, und 'American' als eine Art von apple, die ich benutzen würde:
als andere vorgeschlagen. Wenn Sie stattdessen die Fragen, die Sie nicht wissen, ob 'Apple' als Frucht und "Amerikanisch" als eine Art "Apple" vorhanden ist, wenn Sie Lesen eine beliebige Datei in Ihr dict von dict-Daten-Struktur ist, konnten Sie etwas wie:
oder noch besser, so dass Sie nicht unnötig Durchlaufen der gesamten dict von dicts wenn Sie wissen, dass nur Apple hat die Art American:
In all diesen Fällen ist es nicht egal in welcher Reihenfolge die Wörterbücher tatsächlich speichern die Eingaben. Wenn Sie wirklich besorgt über die Bestellung, dann könnten Sie erwägen, einen
OrderedDict
:http://docs.python.org/dev/library/collections.html#collections.OrderedDict
Als ich bemerkte Ihre Beschreibung, die Sie nur wissen, dass Ihr parser geben Sie ein Wörterbuch, das seine Werte sind Wörterbuch auch so:
So haben Sie zu Durchlaufen, Ihre Eltern Wörterbuch. Wenn Sie drucken möchten oder Zugriff aller erste Wörterbuch Schlüssel in
sampleDict.values()
- Liste, Sie können so etwas wie dies:Wenn Sie wollen einfach Zugriff auf ersten key des ersten Elements in
sampleDict.values()
dies kann nützlich sein:Wenn Sie verwenden das Beispiel, das Sie Gaben, bei der Frage, meine ich:
Die Ausgabe für die erste code ist:
Und der Ausgang für den zweiten code ist:
Als bonus, würde ich gerne irgendwie eine andere Lösung für Ihr Problem. Sie scheinen den Umgang mit verschachtelten dictionaries, die in der Regel langweilig, vor allem, wenn Sie haben zu prüfen auf die Existenz einer inneren Schlüssel.
Gibt es einige interessante Bibliotheken im Hinblick auf das auf pypi, hier ist ein Schnellsuche für Sie.
In Ihrem speziellen Fall, dict_digger scheint geeignet.
Können Sie
dict['Apple'].keys()[0]
um den ersten Schlüssel in derApple
Wörterbuch, aber es gibt keine Garantie, dass esAmerican
. Die Reihenfolge von Schlüsseln in einem dictionary können sich ändern, abhängig vom Inhalt des Wörterbuchs und die Reihenfolge der Tasten wurden Hinzugefügt.OrderedDict
imcollections
BibliothekKönnen Sie sich nicht darauf verlassen, um auf Wörterbücher. Aber Sie können versuchen, diese:
Wenn Sie möchten, um zu erhalten, die Sie verwenden möchten, können Sie dies:
http://www.python.org/dev/peps/pep-0372/#ordered-dict-api
Ich weiß, das ist 8 Jahre alt, aber niemand scheint wirklich zu Lesen, und beantwortete die Frage.
Können Sie anrufen .Werte() auf ein dict, um eine Liste der inneren dicts und so auf Sie zugreifen, indem Sie index.
Einfaches Beispiel, um zu verstehen, wie Zugriff auf Elemente im Wörterbuch:-
Erstellen Sie ein Wörterbuch
Entdecken Sie mehr über Python-Dictionaries und lernen interaktiv hier...
Paar Leute erscheinen, trotz der vielen Antworten auf diese Frage zu haben, wies darauf hin, dass Wörterbücher sind nicht bestellte Zuordnungen, und so (bis der Segen der insertion, um mit Python 3.7) die Idee der "ersten" Eintrag in einem Wörterbuch buchstäblich keinen Sinn gemacht hat. Und noch ein
OrderedDict
kann nur zugegriffen werden, indem numerischen index mit solchen uglinesses alsmydict[mydict.keys()[0]]
(Python 2 nur, da in Python 3keys()
ist eine non-subscriptable iterator.)Ab 3.7 ab und in der Praxis in 3,6 als gut - das ist ein neues Verhalten eingeführt wurde, aber nicht Bestandteil der Sprache der Spezifikation bis 3.7 - iteration über die Schlüssel, Werte oder Gegenstände, die ein dict (und, wie ich glaube, auch eingestellt) wird der Ertrag der zuletzt eingefügten Objekte zuerst. Es gibt immer noch keine einfache Möglichkeit, Zugriff auf Sie durch numerische index der Einfügemarke.
Als auf die Frage auswählen und "Formatierung" items, wenn Sie wissen, der Schlüssel, den Sie abrufen möchten, und in dem Wörterbuch, das Sie normalerweise verwenden würden, die den Schlüssel als index, um es abzurufen (
my_var = mydict['Apple']
).Wenn Sie wirklich wollen, um in der Lage sein zu indizieren die Elemente, die durch die Nummer des Eintrags (das ignorieren der Tatsache, dass einem bestimmten Eintrag, die Nummer wird sich ändern, wenn die Einfügungen gemacht werden), dann die entsprechende Struktur wäre wahrscheinlich eine Liste von zwei-element-Tupel. Statt
können Sie verwenden:
Unter diesem regime ist der erste Eintrag
mylist[0]
im klassischen list-endexed form, und sein Wert ist('Apple', {'American':'16', 'Mexican':10, 'Chinese':5})
. Könnte man iteriert über die gesamte Liste wie folgt:aber wenn Sie wissen, dass Sie suchen Sie die Taste "Apple", warum würden Sie nicht einfach ein dict statt?
Euch vorstellen könnte, eine weitere Ebene der Dereferenzierung durch Cachen der Liste der Schlüssel, aber die Komplexität hält zwei Daten-Strukturen in der synchronisation unweigerlich hinzufügen, um die Komplexität des Codes.