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

1voto

Andrew Anderson Punkte 855

Ich habe nach der gleichen Frage gesucht und bin bei meiner Variante gelandet: found_key = [a[0] for a in dict.items() if a[1] == 'value'][0]

Nur für die Fälle, in denen ein Schlüssel einen eindeutigen Wert hat (was bei mir der Fall war).

1voto

Khaled Eid Punkte 36
dict_a = {'length': 5, 'width': 9, 'height': 4}

# get the key of specific value 5
key_of_value = list(dict_a)[list(dict_a.values()).index(5)]
print(key_of_value)  # length

# get the key of minimum value
key_min_value = list(dict_a)[list(dict_a.values()).index(sorted(dict_a.values())[0])]
print(key_min_value)  # height

# get the key of maximum value
key_max_value = list(dict_a)[list(dict_a.values()).index(sorted(dict_a.values(), reverse=True)[0])]
print(key_max_value)  # width

1voto

eold Punkte 5784

Hier ist eine Lösung, die sowohl in Python 2 als auch in Python 3 funktioniert:

dict((v, k) for k, v in list.items())[search_age]

Der Teil bis [search_age] konstruiert das umgekehrte Wörterbuch (wobei Werte Schlüssel sind und umgekehrt). Sie könnten eine Hilfsmethode erstellen, die dieses umgekehrte Wörterbuch wie folgt zwischenspeichert:

def find_name(age, _rev_lookup=dict((v, k) for k, v in ages_by_name.items())):
    return _rev_lookup[age]

oder, noch allgemeiner, eine Fabrik, die eine Methode zum Nachschlagen von Namen nach Alter für eine oder mehrere Ihrer Listen erstellen würde

def create_name_finder(ages_by_name):
    names_by_age = dict((v, k) for k, v in ages_by_name.items())
    def find_name(age):
      return names_by_age[age]

damit Sie in der Lage sind, zu tun:

find_teen_by_age = create_name_finder({'george':16,'amber':19})
...
find_teen_by_age(search_age)

Beachten Sie, dass ich den Namen list a ages_by_name da ersterer ein vordefinierter Typ ist.

0voto

Mansur Ul Hasan Punkte 2026

In meinem Fall ist der einfachste Weg, um disctionary in Ihrem Code zu instanziieren, dann können Sie Schlüssel von ihm wie unten aufrufen

Hier ist meine Klasse mit Wörterbuch

class Config:

def local(self):
    return {
        "temp_dir": "/tmp/dirtest/",
        "devops": "Mansur",
    }

So instanziieren Sie Ihr Wörterbuch

config =  vars.Config()
local_config = config.local()

Schließlich rufen Sie Ihre Wörterbuchschlüssel auf

patched = local_config.get("devops")

0voto

pgalilea Punkte 231

Ich habe es schließlich mit einer Funktion gemacht. Auf diese Weise können Sie die vollständige Schleife vermeiden, und die Intuition sagt, dass sie schneller sein sollte als andere vorgestellte Lösungen.

def get_key_from_value(my_dict, to_find):

    for k,v in my_dict.items():
        if v==to_find: return k

    return None

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