Dość nowy w Pythonie, wciąż walczy z tak dużą ilością informacji.

Cała dokumentacja, którą widziałem o słownikach, wyjaśniają różne sposoby uzyskania wartości za pomocą klucza - ale szukam piythonic sposobu, aby zrobić odwrotnie - Uzyskaj klucz za pomocą wartości.

Wiem, że mogę pętli przez klucze i sprawdzić swoje wartości, dopóki nie znajdę wartości, której szukam, a następnie złap klucz, ale szukam bezpośredniej trasy.

13
Vector 5 październik 2011, 10:27

3 odpowiedzi

Ponieważ słownik może zawierać duplikaty wartości (tj. {'a': 'A', 'b': 'A'}), jedynym sposobem na znalezienie klucza z wartości jest iterowaniem w słowniku, jak opisujesz.

Lub ... zbuduj przeciwny słownik. Musisz go odtworzyć po każdej modyfikacji oryginalnego słownika.

Lub ... Napisz klasę, która utrzymuje słownik obydwów. Będziesz musiał zarządzać sytuacjami, w których pojawia się zduplikowana wartość.

6
eumiro 5 październik 2011, 06:29

Pierwsze rozwiązanie z rozumieniem listy jest dobre. Ale mała poprawka dla Pythona 3.x, zamiast .iteritems() powinna być tylko .items():

[k for k, v in d.items() if v == desired_value]
1
Idan Richman 5 grudzień 2017, 14:37

Budowanie naprzeciwko słownika nie jest wcale dobry sposób, ponieważ jeden lub więcej klucza ma taką samą wartość, ale jeśli inwertujesz go, musisz wstawić klawisz: [Value1, ...] struktura, która doprowadzi Cię do innego problemu.

0
Raj Damani 7 marzec 2016, 06:30