969 Stimmen

Schlüssel nach Wert im Wörterbuch abrufen

Ich habe eine Funktion entwickelt, die die Altersangaben in einer Dictionary und zeigt den passenden Namen an:

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, aber ich weiß nicht, wie man den Namen der Person anzeigt. Außerdem erhalte ich eine KeyError wegen der Zeile 5. Ich weiß, dass das nicht korrekt ist, aber ich finde nicht heraus, wie ich die Suche rückwärts durchführen kann.

0 Stimmen

1 Stimmen

Würden Sie ein Wort anhand seiner Definition in einem Wörterbuch finden? NEIN.

0 Stimmen

Sie können eine verschlossene Tür nicht öffnen. (Es sei denn, man bricht sie auf.)

7voto

Jeroen Punkte 69
d= {'george':16,'amber':19}

dict((v,k) for k,v in d.items()).get(16)

Die Ausgabe sieht wie folgt aus:

-> prints george

0 Stimmen

[k für k, v in d.items() if v==16]

7voto

Shishir Punkte 159

Hier nimmt recover_key das Wörterbuch und den Wert, der im Wörterbuch gefunden werden soll. Dann wird eine Schleife über die Schlüssel im Wörterbuch gezogen, ein Vergleich mit dem Wert durchgeführt und der betreffende Schlüssel zurückgegeben.

def recover_key(dicty,value):
    for a_key in dicty.keys():
        if (dicty[a_key] == value):
            return a_key

6voto

patrick Punkte 51
for name in mydict:
    if mydict[name] == search_age:
        print(name) 
        #or do something else with it. 
        #if in a function append to a temporary list, 
        #then after the loop return the list

1 Stimmen

Die Verwendung einer for-Schleife und von append ist viel langsamer als eine Listenauflösung und außerdem länger.

5voto

Carson Punkte 3411
my_dict = {'A': 19, 'B': 28, 'carson': 28}
search_age = 28

nur einen nehmen

name = next((name for name, age in my_dict.items() if age == search_age), None)
print(name)  # 'B'

mehrere Daten erhalten

name_list = [name for name, age in filter(lambda item: item[1] == search_age, my_dict.items())]
print(name_list)  # ['B', 'carson']

0 Stimmen

Vielen Dank für Ihre Lösung mit mehreren Schlüsseln.

5voto

Frank Wang Punkte 371

Ich habe alle Antworten überflogen, und in keiner wurde erwähnt, dass man einfach die Listenverstehen ?

Diese pythonische Ein-Zeilen-Lösung kann alle Schlüssel für eine beliebige Anzahl von gegebenen Werten zurückgeben (getestet in Python 3.9.1):

>>> dictionary = {'george' : 16, 'amber' : 19, 'frank': 19}
>>>
>>> age = 19
>>> name = [k for k in dictionary.keys() if dictionary[k] == age]; name
['george', 'frank']
>>>
>>> age = (16, 19)
>>> name = [k for k in dictionary.keys() if dictionary[k] in age]; name
['george', 'amber', 'frank']
>>>
>>> age = (22, 25)
>>> name = [k for k in dictionary.keys() if dictionary[k] in age]; name
[]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X