2017-05-10 2 views
-2

abgerufen werden Ich möchte die Liste der Schlüssel des Wörterbuchs für einen bestimmten Wert erhalten. Zum BeispielWie alle Schlüssel mit einem bestimmten Wert aus dem Wörterbuch in Python

my_dict = {1: 2, 3: 3, 4: 2} 
value = 2 

mag ich bekommen 1 und 4.

Wie die Liste der entsprechenden Tasten bekommen?

+4

Was haben Sie versucht? Dies ist relativ einfach ohne zusätzliche Bibliotheken und ein einfaches "Listenverständnis". – AChampion

+0

Das Wörterbuch ist für Lookups in die andere Richtung gedacht. Wenn Sie Wert -> Schlüssel oft nachschlagen müssen, sollten Sie Ihre Datenstruktur überarbeiten. –

Antwort

5

Mit Liste Begreifen Sie pro Werte sowie je Tasten filtern:

given_value = 2 
keys_list = [k for k, v in my_dict.items() if v == given_value] # [1, 4] 

oder Verwenden von Python eingebaute in filter:

given_value = 2 
keys_iter = filter(lambda k: my_dict[k] == given_value, my_dict.keys()) # return an iterator 
keys_list = list(keys_iter) 
1

Ein Listenverständnis kann das in linearer Zeit tun - wenn Sie das einmal brauchen. Wenn Ihr Design zum abwechselnden Abrufen keys -> values und values->keys mappings benötigt, können Sie Ihre eigene Klasse entwerfen oder eine Bibliothek verwenden.

Meine eigene Python Extradict hat die BijectiveDict Klasse, die genau das tut, versucht, so direkt wie möglich zu sein.

Beachten Sie jedoch, dass Sie dort Ihr gewünschtes Verhalten weiter spezifizieren müssen - in Ihrem Beispiel ist der Wert 2 mit 2 Schlüsseln verknüpft. Das Standardverhalten von BijectiveDict besteht darin, die früheren Zuweisungen einfach zu überschreiben: Sie rufen nur den letzten Schlüssel ab, der an einen bestimmten Wert gebunden ist.

Verwandte Themen