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.)

3voto

Raj Damani Punkte 775
def get_Value(dic,value):
    for name in dic:
        if dic[name] == value:
            del dic[name]
            return name

1 Stimmen

Warum wird der Schlüssel aus dem Wörterbuch entfernt? das beantwortet die Frage nicht

3voto

hamidfzm Punkte 4225

Sie müssen ein Wörterbuch und die Umkehrung des Wörterbuchs verwenden. Das bedeutet, dass Sie eine andere Datenstruktur benötigen. Wenn Sie mit Python 3 arbeiten, verwenden Sie enum Modul, aber wenn Sie Python 2.7 verwenden, benutzen Sie enum34 das für Python 2 zurückportiert wurde.

Ejemplo:

from enum import Enum

class Color(Enum): 
    red = 1 
    green = 2 
    blue = 3

>>> print(Color.red) 
Color.red

>>> print(repr(Color.red)) 
<color.red: 1=""> 

>>> type(Color.red) 
<enum 'color'=""> 
>>> isinstance(Color.green, Color) 
True 

>>> member = Color.red 
>>> member.name 
'red' 
>>> member.value 
1

3voto

John Punkte 938

Das ist eine seltsame Frage, denn schon der erste Kommentar gibt eine perfekte Antwort.
Auf der Grundlage des bereitgestellten Beispieldatenbeispiels

dictionary = {'george': 16, 'amber': 19}
print(dictionary["george"])

Sie gibt zurück

16

Sie wollen also das Gegenteil
um "16" einzugeben und "george" zu erhalten Also einfach Schlüssel und Werte vertauschen und fertig

dictionary = {'george': 16, 'amber': 19}
inv_dict = {value:key for key, value in dictionary.items()}
print(inv_dict[16])

Ich war in der genau entgegengesetzten Position, denn ich hatte ein Wörterbuch wie

{16:'george', 19:'amber'}

und ich habe versucht, "george" zu füttern und 16 zu erhalten...ich habe verschiedene Arten von Schleifen und Iteratoren ausprobiert, die OK..sie funktionieren, aber es war nicht die einfache einzeilige Lösung, die ich für ein schnelles Ergebnis verwenden würde...also habe ich einfach getauscht und die Lösung gefunden.
Wenn ich etwas übersehen habe, lassen Sie es mich bitte wissen, damit ich meine Antwort löschen kann.

5 Stimmen

Hallo, inverse dict ist eine gute Lösung, aber Sie müssen im Auge behalten, dass es keine doppelten Werte in Ihrem Wörterbuch sein darf, sonst würden Sie einige Werte in der invertierten dict verlieren. Wie man damit umgeht, wurde zum Beispiel hier in der Antwort von Robert Rossney beantwortet stackoverflow.com/questions/483666/ .

0 Stimmen

Das ist eine gute Möglichkeit, aber zumindest in meinem Fall habe ich keine Duplikate.

0 Stimmen

Das ist eine schlechte Lösung, wenn es doppelte Werte gibt.

3voto

user3649211 Punkte 31

Hier ist meine Meinung dazu. Dies ist gut für die Anzeige mehrerer Ergebnisse, nur für den Fall, dass Sie eine benötigen. Also habe ich die Liste auch hinzugefügt

myList = {'george':16,'amber':19, 'rachel':19, 
           'david':15 }                         #Setting the dictionary
result=[]                                       #Making ready of the result list
search_age = int(input('Enter age '))

for keywords in myList.keys():
    if myList[keywords] ==search_age:
    result.append(keywords)                    #This part, we are making list of results

for res in result:                             #We are now printing the results
    print(res)

Und das war's...

3voto

Ethan Punkte 65

Es gibt keine einfache Möglichkeit, einen Schlüssel in einer Liste zu finden, indem man den Wert "nachschlägt". Wenn Sie jedoch den Wert kennen, können Sie durch Iteration durch die Schlüssel die Werte im Wörterbuch anhand des Elements nachschlagen. Wenn D[Element], wobei D ein Wörterbuchobjekt ist, gleich dem gesuchten Schlüssel ist, können Sie einen Code ausführen.

D = {'Ali': 20, 'Marina': 12, 'George':16}
age = int(input('enter age:\t'))  
for element in D.keys():
    if D[element] == age:
        print(element)

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