Trotz der vielen Antworten auf diese Frage scheinen nur wenige Menschen darauf hingewiesen zu haben, dass Wörterbücher ungeordnete Zuordnungen sind, und so (bis zum Segen der Einfügereihenfolge mit Python 3.7) wurde die Idee des "ersten" Eintrags in einem Wörterbuch buchstäblich gemacht keinen Sinn. Und selbst auf einen OrderedDictkann nur über einen numerischen Index zugegriffen werden, wenn solche Hässlichkeiten wie mydict[mydict.keys()[0]](nur Python 2, da Python 3 keys()ein nicht abonnierbarer Iterator ist) verwendet werden.
Ab 3.7 und in der Praxis auch in 3.6 - das neue Verhalten wurde dann eingeführt, aber erst ab 3.7 in die Sprachspezifikation aufgenommen - Iteration über die Schlüssel, Werte oder Elemente eines Diktats (und, glaube ich, a set also) liefert zuerst die zuletzt eingefügten Objekte. Es gibt immer noch keine einfache Möglichkeit, über einen numerischen Einfügeindex auf sie zuzugreifen.
Wenn Sie den Schlüssel kennen, den Sie im Wörterbuch abrufen möchten, verwenden Sie den Schlüssel normalerweise als Index, um ihn abzurufen ( my_var = mydict['Apple']).
Wenn Sie wirklich in der Lage sein möchten, die Elemente nach Eintragsnummer zu indizieren (ohne die Tatsache zu berücksichtigen, dass sich die Nummer eines bestimmten Eintrags beim Einfügen ändert), ist die entsprechende Struktur wahrscheinlich eine Liste von Tupeln mit zwei Elementen. Anstatt
mydict = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'} }
Sie könnten verwenden:
mylist = [
('Apple', {'American':'16', 'Mexican':10, 'Chinese':5}),
('Grapes', {'Arabian': '25', 'Indian': '20'}
]
Unter diesem Regime ist der erste Eintrag mylist[0]in klassischer Listen-endexierter Form und sein Wert ist ('Apple', {'American':'16', 'Mexican':10, 'Chinese':5}). Sie können die gesamte Liste wie folgt durchlaufen:
for (key, value) in mylist: # unpacks to avoid tuple indexing
if key == 'Apple':
if 'American' in value:
print(value['American'])
Aber wenn Sie wissen, dass Sie nach dem Schlüssel "Apple" suchen, warum würden Sie nicht stattdessen einfach ein Diktat verwenden?
Sie könnten eine zusätzliche Indirektionsebene einführen, indem Sie die Liste der Schlüssel zwischenspeichern. Die Komplexität, zwei Datenstrukturen synchron zu halten, würde jedoch unweigerlich zur Komplexität Ihres Codes beitragen.