2017-05-31 3 views
1

Ich habe einige Daten wie folgt aus:Suche Wert Wörterbuch in einem Wörterbuch

{'cities': [{'abbrev': 'NY', 'name': 'New York'}, {'abbrev': 'BO', 'name': 'Boston'}]} 

Aus meiner knappen Wissen über Python dies sieht aus wie ein Wörterbuch in einem Wörterbuch.

Aber wie kann ich "NY" als Schlüssel verwenden, um den Wert "New York" zu erhalten?

+1

Sorry, könnten Sie besser erklären, was Sie wollen? –

+0

Wäre das nur eine Abkürzung oder würde es auch anders funktionieren? – njoosse

Antwort

2

Verwenden next und filtern Sie die Unter Wörterbücher basierend auf der 'abbrev' Schlüssel:

d = {'cities': [{'abbrev': 'NY', 'name': 'New York'}, 
       {'abbrev': 'BO', 'name': 'Boston'}]} 

city_name = next(city['name'] for city in d['cities'] 
       if city['abbrev'] == 'NY') 

print city_name 

Ausgang:

New York 
+0

Die anderen Vorschläge würden vielleicht auch funktionieren. Aber da ich das für meinen Zweck leicht ausführen kann, markiere ich es als (An) Akzeptierte Antwort. Danke allen, die dazu beigetragen haben. – user2025383

3

Wenn Sie ein Dataset nicht an Ihre Bedürfnisse angepasst haben, können Sie statt dessen "wie es ist" ein anderes Wörterbuch erstellen, indem Sie ein Wörterbuchverständnis mit Schlüssel/Werten als Werte Ihres Sub-Worts verwenden. Wörterbücher mit den festen Schlüsseln.

d = {'cities': [{'abbrev': 'NY', 'name': 'New York'}, {'abbrev': 'BO', 'name': 'Boston'}]} 
newd = {sd["abbrev"]:sd["name"] for sd in d['cities']} 
print(newd) 

Ergebnisse in:

{'NY': 'New York', 'BO': 'Boston'} 

und natürlich: print(newd['NY'])New York

Sobald das Wörterbuch gebaut ergibt, können Sie es so oft wiederverwenden, wie Sie mit großer Lookup-Geschwindigkeit benötigen. Erstellen Sie bei Bedarf weitere spezialisierte Wörterbücher aus dem ursprünglichen Dataset.

+1

Das ist schlau und es kann auch für die anderen Abkürzungen wiederverwendet werden! Aber angesichts des "knappen Wissens" (in der Frage angegeben) sollten Sie wahrscheinlich angeben, wie Sie auf "New York" im endgültigen Wörterbuch zugreifen können :) – MSeifert

3

Es ist ein Wörterbuch mit einem Schlüssel-Wert-Paar. Der Wert ist eine Liste von Wörterbüchern.

d = {'cities': [{'abbrev': 'NY', 'name': 'New York'}, {'abbrev': 'BO', 'name': 'Boston'}]} 

Um den name für eine Abkürzung finden Sie über die Wörterbücher in der Liste iterieren sollte und dann vergleichen Sie die abbrev -Wertes für ein Spiel:

for city in d['cities']:  # iterate over the inner list 
    if city['abbrev'] == 'NY': # check for a match 
     print(city['name'])  # print the matching "name" 

Statt der print Sie auch die sparen Wörterbuch mit der Abkürzung, oder geben Sie es zurück.

+1

toll für Ordnung und Pädagogik – kouty

0

Ich denke, dass ich das Problem verstehen.

'NY' ist ein Wert, kein Schlüssel.

Vielleicht brauchen Sie etwas wie {'cities':{'NY':'New York','BO':'Boston'}, damit Sie eingeben können: myvar['cities']['NY'] und es wird 'New York' zurückgegeben.

Wenn Sie Verwendung haben x = {'cities': [{'abbrev': 'NY', 'name': 'New York'}, {'abbrev': 'BO', 'name': 'Boston'}]} Sie eine Funktion erstellen können:

def search(abbrev): 
    for cities in x['cities']: 
     if cities['abbrev'] == abbrev: 
      return cities['name'] 

Ausgang:

>>> search('NY') 
'New York' 
>>> search('BO') 
'Boston' 

PD: Ich benutze Python 3.6

Auch mit diesem Code können Sie auch finden Abk:

def search(s, abbrev): 
    for cities in x['cities']: 
     if cities['abbrev'] == abbrev: return cities['name'], cities['abbrev'] 
     if cities['name'] == abbrev: return cities['name'], cities['abbrev']