Pythona | Pobierz klucz z wartości w słowniku
Zobaczmy, jak uzyskać klucz według wartości w słowniku Pythona.
Przykład: kod jednowierszowy
Python3
# creating a new dictionary> my_dict> => {> 'Java'> :> 100> ,> 'Python'> :> 112> ,> 'C'> :> 11> }> # one-liner> print> (> 'One line Code Key value: '> ,> list> (my_dict.keys())> > [> list> (my_dict.values()).index(> 100> )])> |
Wyjście:
Java
Wyodrębnij klucz ze słownika Pythona za pomocą wartości
Metoda 1: Uzyskaj klucz według wartości, korzystając ze zrozumienia list
Rozumienie listy składa się z nawiasów zawierających wyrażenie, które jest wykonywane dla każdego elementu wraz z pętlą for w celu iteracji po każdym elemencie listy Pythona w celu uzyskania klucza z wartości w Słownik .
Python3
dic> => {> 'geeks'> :> 'A'> ,> 'for'> :> 'B'> ,> 'geeks'> :> 'C'> }> value> => {i> for> i> in> dic> if> dic[i]> => => 'B'> }> print> (> 'key by value:'> ,value)> |
Wyjście:
key by value: {'for'} Złożoność czasowa: NA)
Przestrzeń pomocnicza: O(1)
Metoda 2: Uzyskaj klucz według wartości za pomocą list.index()
The metoda indeksu(). zwraca indeks odpowiedniej wartości na liście. Zastosowane tutaj podejście polega na znalezieniu dwóch oddzielnych list kluczy i wartości. Następnie pobierz klucz za pomocą pozycja wartości na liście wartości. Ponieważ klucz w dowolnej pozycji N na liście kluczy będzie miał odpowiadającą wartość na pozycji N na liście wartości.
Python3
# creating a new dictionary> my_dict> => {> 'java'> :> 100> ,> 'python'> :> 112> ,> 'c'> :> 11> }> # list out keys and values separately> key_list> => list> (my_dict.keys())> val_list> => list> (my_dict.values())> # print key with val 100> position> => val_list.index(> 100> )> print> (key_list[position])> |
Wyjście:
java
Złożoność czasowa: O(1)
Przestrzeń pomocnicza: O(1)
Metoda 3: Uzyskaj klucz według wartości za pomocą dict.item()
Możemy także pobrać klucz z wartości, dopasowując wszystkie wartości za pomocą metody dict.item(), a następnie wypisując odpowiedni klucz do podanej wartości.
Python3
# function to return key for any value> def> get_key(val):> > > for> key, value> in> my_dict.items():> > if> val> => => value:> > return> key> > return> 'key doesn't exist'> # Driver Code> my_dict> => {> 'Java'> :> 100> ,> 'Python'> :> 112> ,> 'C'> :> 11> }> print> (get_key(> 100> ))> print> (get_key(> 11> ))> |
Wyjście
Java C
Złożoność czasowa: O(n), gdzie n jest liczbą par klucz-wartość w słowniku.
Przestrzeń pomocnicza: O(1), ponieważ przestrzeń zajmowana przez funkcję nie zależy od rozmiaru słownika wejściowego.
Metoda 4: Używanie lambdy i filter()
Oto przykład użycia funkcji filter() w celu uzyskania klucza odpowiadającego wartości w słowniku:
Python3
my_dict> => {> 'Java'> :> 100> ,> 'Python'> :> 112> ,> 'C'> :> 11> }> # Get the key corresponding to value 100> key> => list> (> filter> (> lambda> x: my_dict[x]> => => 100> , my_dict))[> 0> ]> print> (key)> #This code is contributed by Edula Vinay Kumar Reddy> |
Wyjście
Java
W tym przykładzie funkcja filter() służy do utworzenia listy kluczy z my_dict, gdzie wartość jest równa 100. Powstała lista jest następnie indeksowana na pozycji 0, aby uzyskać pierwszy element, którym jest klucz odpowiadający wartości 100.
Złożoność czasowa: O(n) , ponieważ funkcja filter() musi wykonać iterację po całym słowniku, aby utworzyć listę kluczy.
Przestrzeń pomocnicza to O(n) , ponieważ lista kluczy utworzona przez filter() ma rozmiar równy liczbie elementów w słowniku.
METODA 5: Używanie metody przedmiotów
Ten kod znajduje klucz danej wartości w słowniku, używając rozumienia listowego do iteracji po pozycjach w słowniku i sprawdzania, czy wartość pasuje do podanej wartości. Jeśli klucz zostanie znaleziony, zostanie on dodany do listy, a pierwszy element listy zostanie wydrukowany jako klucz dla podanej wartości. Jeżeli wartość nie zostanie znaleziona w słowniku, zostanie wydrukowany komunikat informujący, że nie została znaleziona.
Kroki:
- Użyj metody items słownika, aby przejść przez każdą parę klucz-wartość w my_dict.
- Sprawdź, czy wartość skojarzona z bieżącym kluczem jest równa podanej wartości.
- Jeśli jest równy, dołącz bieżący klucz do listy kluczy.
- Jeśli pętla zakończy się bez znalezienia pasującej wartości, wypisz komunikat wskazujący, że wartość nie została znaleziona.
- Jeśli znaleziono pasujący klucz, wydrukuj pierwszy klucz z listy.
Python3
# input list> my_dict> => {> 'Java'> :> 100> ,> 'Python'> :> 112> ,> 'C'> :> 11> }> value> => 112> key_list> => [key> for> key, val> in> my_dict.items()> if> val> => => value]> if> len> (key_list)>> 0> :> > print> (> 'The key for the value'> , value,> 'is'> , key_list[> 0> ])> else> :> > print> (> 'Value not found in dictionary'> )> |
Wyjście
The key for the value 112 is Python
Złożoność czasowa: O(N), gdzie n to liczba par klucz-wartość w słowniku.
Przestrzeń pomocnicza: O(K) , gdzie k jest liczbą kluczy pasujących do podanej wartości.
METODA 6: Używanie modułu re
Program wykorzystuje moduł re w Pythonie, aby znaleźć w słowniku klucz odpowiadający podanej wartości. Tworzy wzorzec wyrażenia regularnego pasujący do wartości otoczonej granicami słów, a następnie używa funkcji next() do iteracji po pozycjach w słowniku i wyszukiwania wartości pasującej do wzorca. Jeśli zostanie znalezione dopasowanie, program zwróci odpowiedni klucz.
ALGORYTM:
- Utwórz wzorzec wyrażenia regularnego pasujący do szukanej wartości, otoczony granicami słów.
- Użyj funkcji next(), aby przeglądać elementy w słowniku w poszukiwaniu wartości pasującej do wzorca.
- Jeśli zostanie znalezione dopasowanie, zwróć odpowiedni klucz. W przeciwnym razie zwróć Brak.
Python3
import> re> # Given input> my_dict> => {> 'Java'> :> 100> ,> 'Python'> :> 112> ,> 'C'> :> 11> }> value> => 100> # Program code> pattern> => re.> compile> (r> ''> +> str> (value)> +> r> ''> )> key> => next> ((k> for> k, v> in> my_dict.items()> if> pattern.search(> str> (v))),> None> )> print> (key)> |
Wyjście
Java
Złożoność czasowa: O(N), Tworzenie wzorca wyrażenia regularnego zajmuje O(1) czasu. Wyszukiwanie wartości pasującej do wzorca w każdym elemencie słownika zajmuje w najgorszym przypadku czas O(n), gdzie n jest liczbą elementów w słowniku. Każda funkcja next() i instrukcja if zajmują O(1) czasu. Zatem całkowita złożoność czasowa programu wynosi O(n).
Przestrzeń pomocnicza: O(1), Wzorzec wyrażenia regularnego i zmienna kluczowa wymagają przestrzeni O(1). Zarówno zmienna wzorca, jak i wyrażenie generatora wewnątrz funkcji next() wymagają spacji O(1). Zmienne k i v użyte w wyrażeniu generatora nie wymagają dodatkowej przestrzeni, ponieważ są tworzone w ramach iteracji. Dlatego ogólna złożoność przestrzenna programu wynosi O (1).