Suchen im verschachtelten Dictionary

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
enercon
User
Beiträge: 2
Registriert: Dienstag 18. November 2014, 22:27

Hallo,
für einfache dictionaries kann ich mittels iteritems nach meinen Werten suchen, doch wie mach ich das bei mehrfach geschachtelten dictionaries?

Code: Alles auswählen

#stark reduziertes Beispiel:
server = {'standortA': {
'server1': {'ip_address': 'a.a.a.a', 'port': 4096 },
'server2': {'ip_address': 'a.a.a.b', 'port': 1024 }
},
'standortB': {
'server3': {'ip_address': 'a.a.b.a', 'port': 4096 },
'server4': {'ip_address': 'a.a.b.b', 'port': 1024 }
},
}

#Suche nach Servern die zB den wert 4096 haben
for key, value in server.iteritems():
    if value == 4096:
        print key, value  #liefert leider nichts

for key, value in server['standortA']['server1'].iteritems():
    if value == 4096:
        print key,value
#liefert:         
port 4096
Wie finde ich Einträge mit einem Wert x in diesem Dictionary?
Geht das nur über mehrere Schleifen, oder einfacher?
Und noch eine zweite Frage dazu. Wie komme ich an den kompletten Datensatz, wenn ich etwas gefunden habe? also nicht nur "port 4096" sondern idealerweise wieder ein dictionary:

Code: Alles auswählen

{
'standortA': {'server1': {'ip_address': 'a.a.a.a', 'port': 4096 }},
'standortB': {'server3': {'ip_address': 'a.a.b.a', 'port': 4096 }}
}
Vielen Dank für Hinweise

enercon
BlackJack

@enercon: Das hängt ein wenig von den Umständen ab und wie generisch das gelöst werden muss. Wenn die Strukturen bekannt sind, würde ich auch Code speziell für diese Strukturen schreiben.
enercon
User
Beiträge: 2
Registriert: Dienstag 18. November 2014, 22:27

BlackJack hat geschrieben:@enercon: Das hängt ein wenig von den Umständen ab und wie generisch das gelöst werden muss. Wenn die Strukturen bekannt sind, würde ich auch Code speziell für diese Strukturen schreiben.
Hallo @BlackJack, ich fürchte die Strukturen sind sehr fließend, ich kann also nicht genau sagen, ob die gesuchte Info in der 2. 3. oder 4. Ebene zu finden ist. Ich weiß nur, daß sie vorhanden ist.

enercon
BlackJack

@enercon: Dann wird es Zeit sich mit dem lustigen Konzept „Rekursion” zu beschäftigen. :-)
Antworten