Ich habe eine Funktion entwickelt, die in einem "Wörterbuch" nach Altersangaben sucht und den passenden Namen anzeigt:
dictionary = {'george' : 16, 'amber' : 19}
search_age = raw_input("Provide age")
for age in dictionary.values():
if age == search_age:
name = dictionary[age]
print name
Ich weiß, wie man vergleicht und das Alter findet, ich weiß nur nicht, wie man den Namen der Person anzeigt. Außerdem erhalte ich einen KeyError
wegen Zeile 5. Ich weiß, dass es nicht korrekt ist, aber ich kann nicht herausfinden, wie ich die Suche rückwärts durchführen kann.
Es gibt keine. Das "Urteil" ist nicht für diese Art der Verwendung gedacht.
for name, age in dictionary.items(): # for name, age in dictionary.iteritems(): (for Python 2.x)
if age == search_age:
print(name)
Wenn Sie sowohl den Namen als auch das Alter wissen wollen, sollten Sie .items()
verwenden, das Ihnen Schlüssel-Tupel ("key, value") liefert:
for name, age in mydict.items():
if age == search_age:
print name
Sie können das Tupel direkt in der "for"-Schleife in zwei separate Variablen entpacken und dann das Alter abgleichen.
Sie sollten auch die Umkehrung des Wörterbuchs in Betracht ziehen, wenn Sie generell nach Alter suchen und keine zwei Personen das gleiche Alter haben:
{16: 'george', 19: 'amber'}
Sie können also den Namen für ein Alter nachschlagen, indem Sie einfach
mydict[search_age]
Ich habe es mydict
statt list
genannt, weil list
der Name eines eingebauten Typs ist, und man diesen Namen nicht für etwas anderes verwenden sollte.
Sie können sogar eine Liste aller Personen mit einem bestimmten Alter in einer Zeile erhalten:
[name for name, age in mydict.items() if age == search_age]
oder wenn es nur eine Person mit jedem Alter gibt:
next((name for name, age in mydict.items() if age == search_age), None)
was Ihnen nur None
liefert, wenn es niemanden mit diesem Alter gibt.
Schließlich, wenn das dict
lang ist und Sie Python 2 verwenden, sollten Sie erwägen, .iteritems()
statt .items()
zu verwenden, wie Cat Plus Plus es in seiner Antwort getan hat, da es keine Kopie der Liste erstellen muss.