logo

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

байтів до рядка python




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: Використання методу елементів

Цей код знаходить ключ заданого значення в словнику за допомогою розуміння списку, щоб перебирати елементи в словнику та перевіряти, чи значення відповідає заданому значенню. Якщо ключ знайдено, він додається до списку, а перший елемент списку друкується як ключ для даного значення. Якщо значення не знайдено в словнику, друкується повідомлення про те, що воно не знайдено.

Кроки:

  1. Використовуйте метод items зі словника, щоб прокрутити кожну пару ключ-значення в my_dict.
  2. Перевірте, чи значення, пов’язане з поточним ключем, дорівнює заданому значенню.
  3. Якщо він дорівнює, додайте поточний ключ до списку ключів.
  4. Якщо цикл завершується без пошуку відповідного значення, надрукуйте повідомлення про те, що значення не знайдено.
  5. Якщо знайдено відповідний ключ, надрукуйте перший ключ у списку.

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() для повторення елементів у словнику та пошуку значення, яке відповідає шаблону. Якщо збіг знайдено, програма повертає відповідний ключ.

АЛГОРИТМ:

  1. Створіть шаблон регулярного виразу, який відповідає шуканому значенню, оточений межами слів.
  2. Використовуйте функцію next(), щоб перебирати елементи в словнику, шукаючи значення, яке відповідає шаблону.
  3. Якщо збіг знайдено, поверніть відповідний ключ. В іншому випадку поверніть 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).