Frage Zugreifen auf Elemente des Python-Wörterbuchs


Betrachten Sie ein Diktat wie

mydict = {
  'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
  'Grapes':{'Arabian':'25','Indian':'20'} }

Wie greife ich beispielsweise auf ein bestimmtes Element dieses Wörterbuchs zu? zum Beispiel möchte ich nach einigen Formatierungen das erste Element von Apple drucken, das in unserem Fall nur "amerikanisch" ist?

Zusätzliche Information Die obige Datenstruktur wurde erstellt, indem eine Eingabedatei in einer Python-Funktion analysiert wurde. Einmal erstellt, bleibt es jedoch für diesen Lauf gleich.

Ich verwende diese Datenstruktur in meiner Funktion.

Wenn sich die Datei ändert, ist der Inhalt der Datei beim nächsten Ausführen dieser Anwendung unterschiedlich, und daher wird der Inhalt dieser Datenstruktur unterschiedlich sein, aber das Format wäre gleich. Sie sehen also, dass ich in meiner Funktion nicht weiß, dass das erste Element in Apple "amerikanisch" oder irgendetwas anderes ist also kann ich "American" nicht direkt als Schlüssel verwenden


75
2018-03-23 11:40


Ursprung


Antworten:


Da es sich um ein Wörterbuch handelt, greifen Sie mit den Tasten darauf zu. Laden Sie das Wörterbuch unter "Apple", gehen Sie folgendermaßen vor:

>>> mydict["Apple"]
{'American': '16', 'Mexican': 10, 'Chinese': 5}

Und wie viele von ihnen sind Amerikaner (16), wie folgt:

>>> mydict["Apple"]["American"]
'16'

82
2018-03-23 11:44



Wenn die Fragen lauten, wenn ich weiß, dass ich ein Diktat habe, das "Apfel" als Frucht und "Amerikanisch" als eine Art Apfel enthält, würde ich verwenden:

myDict = {'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
          'Grapes':{'Arabian':'25','Indian':'20'} }


print myDict['Apple']['American']

wie andere vorgeschlagen haben. Wenn stattdessen die Fragen sind, wissen Sie nicht, ob "Apple" als eine Frucht und "American" als eine Art von "Apple" existieren, wenn Sie eine willkürliche Datei in Ihr Diktat der dict Datenstruktur lesen, könnten Sie etwas tun wie:

print [ftype['American'] for f,ftype in myDict.iteritems() if f == 'Apple' and 'American' in ftype]

oder besser noch, damit Sie nicht unnötig über das gesamte Diktat iterieren, wenn Sie wissen, dass nur Apple den Typ Amerikanisch hat:

if 'Apple' in myDict:
    if 'American' in myDict['Apple']:
        print myDict['Apple']['American']

In all diesen Fällen ist es egal, in welcher Reihenfolge die Wörterbücher tatsächlich die Einträge speichern. Wenn Sie sich wirklich Sorgen um den Auftrag machen, sollten Sie vielleicht einen OrderedDict:

http://docs.python.org/dev/library/collections.html#collections.OrderedDict


20
2018-03-23 12:18



Wie ich Ihre Beschreibung bemerkt habe, wissen Sie nur, dass Ihr Parser Ihnen ein Wörterbuch geben wird, dessen Werte Wörterbücher wie folgt sind:

sampleDict = {
              "key1": {"key10": "value10", "key11": "value11"},
              "key2": {"key20": "value20", "key21": "value21"}
              }

Sie müssen also über Ihr Elternwörterbuch iterieren. Wenn Sie alle ersten Wörterbuchschlüssel ausdrucken oder darauf zugreifen wollen sampleDict.values() Liste, können Sie etwas wie folgt verwenden:

for key, value in sampleDict.items():
    print value.keys()[0]

Wenn Sie nur auf den ersten Schlüssel des ersten Artikels zugreifen möchten sampleDict.values(), das kann nützlich sein:

print sampleDict.values()[0].keys()[0]

Wenn Sie das Beispiel verwenden, das Sie in der Frage angegeben haben, meine ich:

sampleDict = {
              'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
              'Grapes':{'Arabian':'25','Indian':'20'}
              }

Die Ausgabe für den ersten Code lautet:

American
Indian

Und die Ausgabe für den zweiten Code ist:

American

14
2018-02-25 10:40



Als Bonus möchte ich Ihrem Problem eine andere Lösung anbieten. Sie scheinen mit verschachtelten Wörterbüchern zu tun zu haben, was normalerweise mühsam ist, besonders wenn Sie nach dem Vorhandensein eines inneren Schlüssels suchen müssen.

Es gibt einige interessante Bibliotheken diesbezüglich auf Pypi, hier ist ein schnelle Suche für dich.

In Ihrem speziellen Fall dict_digger scheint geeignet zu sein.

>>> import dict_digger
>>> d = {
  'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
  'Grapes':{'Arabian':'25','Indian':'20'} 
}

>>> print(dict_digger.dig(d, 'Apple','American'))
16
>>> print(dict_digger.dig(d, 'Grapes','American'))
None

8
2018-02-22 16:10



Sie können verwenden dict['Apple'].keys()[0] um den ersten Schlüssel in der Apple Wörterbuch, aber es gibt keine Garantie, dass es sein wird American. Die Reihenfolge der Schlüssel in einem Wörterbuch kann sich abhängig vom Inhalt des Wörterbuchs und der Reihenfolge ändern, in der die Schlüssel hinzugefügt wurden.


7
2018-03-23 11:42



Sie können sich nicht auf die Reihenfolge der Wörterbücher verlassen. Aber du kannst es versuchen:

dict['Apple'].items()[0][0]

Wenn Sie möchten, dass die Bestellung erhalten bleibt, können Sie Folgendes verwenden: http://www.python.org/dev/peps/pep-0372/#ordered-dict-api


3
2018-03-23 11:43



Einfaches Beispiel, um zu verstehen, wie auf Elemente im Wörterbuch zugegriffen wird: -

Erstellen Sie ein Wörterbuch

d = {'dog' : 'bark', 'cat' : 'meow' } 
print(d.get('cat'))
print(d.get('lion'))
print(d.get('lion', 'Not in the dictionary'))
print(d.get('lion', 'NA'))
print(d.get('dog', 'NA'))

Erfahren Sie mehr über Python-Wörterbücher und lernen Sie hier interaktiv ...


0
2018-06-12 06:24