Python | Отримати ключ зі значення в словнику
Давайте подивимося, як отримати ключ за значенням у словнику Python.
Приклад: однорядковий код
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> )])> |
Вихід:
Java
Видобути ключ зі словника Python за допомогою значення
Спосіб 1. Отримайте ключ за значенням за допомогою розуміння списку
Розуміння списку складається з дужок, що містять вираз, який виконується для кожного елемента разом із циклом for для повторення кожного елемента в списку Python для отримання ключа зі значення в Словник .
Python3
dic> => {> 'geeks'> :> 'A'> ,> 'for'> :> 'B'> ,> 'geeks'> :> 'C'> }> value> => {i> for> i> in> dic> if> dic[i]> => => 'B'> }> print> (> 'key by value:'> ,value)> |
Вихід:
key by value: {'for'} Часова складність: O(N)
Допоміжний простір: О(1)
Спосіб 2: Отримати ключ за значенням за допомогою list.index()
The метод index(). повертає індекс відповідного значення в списку. Тут використовується підхід, щоб знайти два окремих списки ключів і значень. Потім візьміть ключ за допомогою положення значення у val_list. Оскільки ключ у будь-якій позиції N у key_list матиме відповідне значення в позиції N у val_list.
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])> |
Вихід:
java
Часова складність: О(1)
Допоміжні приміщення: О(1)
Спосіб 3: Отримати ключ за значенням за допомогою dict.item()
Ми також можемо отримати ключ зі значення, зіставивши всі значення за допомогою dict.item(), а потім надрукувавши відповідний ключ для заданого значення.
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> ))> |
Вихід
Java C
Часова складність: O(n), де n – кількість пар ключ-значення в словнику.
Допоміжні приміщення: O(1), оскільки простір, який використовується функцією, не залежить від розміру вхідного словника.
Спосіб 4: Використання лямбда-вираз і filter()
Ось приклад використання функції filter() для отримання ключа, що відповідає значенню в словнику:
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> |
Вихід
Java
У цьому прикладі функція filter() використовується для створення списку ключів із my_dict, де значення дорівнює 100. Отриманий список потім індексується в позиції 0, щоб отримати перший елемент, який є ключем, що відповідає значенню 100.
Часова складність: O(n) , оскільки функція filter() має виконати ітерацію по всьому словнику, щоб створити список ключів.
Допоміжний простір - O(n) , оскільки список ключів, створений filter(), має розмір, що дорівнює кількості елементів у словнику.
МЕТОД 5: Використання методу елементів
Цей код знаходить ключ заданого значення в словнику за допомогою розуміння списку, щоб перебирати елементи в словнику та перевіряти, чи значення відповідає заданому значенню. Якщо ключ знайдено, він додається до списку, а перший елемент списку друкується як ключ для даного значення. Якщо значення не знайдено в словнику, друкується повідомлення про те, що воно не знайдено.
Кроки:
- Використовуйте метод items зі словника, щоб прокрутити кожну пару ключ-значення в my_dict.
- Перевірте, чи значення, пов’язане з поточним ключем, дорівнює заданому значенню.
- Якщо він дорівнює, додайте поточний ключ до списку ключів.
- Якщо цикл завершується без пошуку відповідного значення, надрукуйте повідомлення про те, що значення не знайдено.
- Якщо знайдено відповідний ключ, надрукуйте перший ключ у списку.
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'> )> |
Вихід
The key for the value 112 is Python
Часова складність: O(N), де n – кількість пар ключ-значення в словнику.
Допоміжний простір: O(K) , де k – кількість ключів, які відповідають заданому значенню.
МЕТОД 6: Використання модуля re
Програма використовує модуль re в Python, щоб знайти ключ у словнику, який відповідає заданому значенню. Він створює шаблон регулярного виразу, який відповідає значенню, оточеному межами слів, а потім використовує функцію next() для повторення елементів у словнику та пошуку значення, яке відповідає шаблону. Якщо збіг знайдено, програма повертає відповідний ключ.
АЛГОРИТМ:
- Створіть шаблон регулярного виразу, який відповідає шуканому значенню, оточений межами слів.
- Використовуйте функцію next(), щоб перебирати елементи в словнику, шукаючи значення, яке відповідає шаблону.
- Якщо збіг знайдено, поверніть відповідний ключ. В іншому випадку поверніть None.
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)> |
Вихід
Java
Часова складність: O(N), Створення шаблону регулярного виразу займає O(1) часу. Пошук значення, яке відповідає шаблону в кожній позиції словника, у найгіршому випадку займає O(n) часу, де n – кількість елементів у словнику. Кожна функція next() і оператор if займають O(1) часу. Таким чином, загальна часова складність програми становить O(n).
Допоміжний простір: O(1), Шаблон регулярного виразу та ключова змінна потребують O(1) простору. Для змінної шаблону та виразу генератора всередині функції next() потрібен пробіл O(1). Змінні k і v, які використовуються у виразі генератора, не потребують додаткового місця, оскільки вони створюються як частина ітерації. Таким чином, загальна просторова складність програми становить O(1).