Как найти ключ по значению в словаре питон
Перейти к содержимому

Как найти ключ по значению в словаре питон

  • автор:

Поиск ключа по его значению в словаре Python

В этом посте мы обсудим, как искать ключ по его значению в словаре Python.

1. Использование выражения генератора

Простое решение — использовать генераторное выражение для поиска ключа по его значению в словаре. Вот как будет выглядеть код:

if __name__ == ‘__main__’ :
# создать словарь
# значение для поиска
# печатает К
print ( next ( ch for ch , code in asciiMap . items ( ) if code == val ) )

2. Использование обратного словаря

Здесь идея состоит в том, чтобы создать словарь пар значение-ключ. Вы можете использовать zip() для объединения значений и ключей словаря и передачи результата конструктору словаря для получения словаря.

if __name__ == ‘__main__’ :
# создать словарь
# значение для поиска
reverseMap = dict ( zip ( asciiMap . values ( ) , asciiMap . keys ( ) ) )
print ( reverseMap . get ( val ) ) # печатает К

Это предполагает, что в словаре нет двух ключей с одинаковыми значениями, и все значения словаря можно хэшировать. Вы можете упростить код с помощью map() функция:

if __name__ == ‘__main__’ :
# создать словарь
# значение для поиска
reverseMap = dict ( map ( reversed , asciiMap . items ( ) ) )
print ( reverseMap . get ( val ) ) # печатает К

Это все о поиске ключа по его значению в словаре Python.

Оценить этот пост

Средний рейтинг 4.83 /5. Подсчет голосов: 24

Голосов пока нет! Будьте первым, кто оценит этот пост.

Сожалеем, что этот пост не оказался для вас полезным!

Расскажите, как мы можем улучшить этот пост?

Спасибо за чтение.

Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.

Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂

Подписывайся
0 Комментарии
Встроенные отзывы
Просмотреть все комментарии
Загрузить больше комментариев
Просматривать
Подпишитесь на новые публикации

  • Все проблемы
  • Практика DSA
  • 100 самых популярных задач
  • 50 лучших классических задач
  • Лучшие алгоритмы
  • Компилятор С/С++
  • Компилятор Java
  • Компилятор Python
  • Компилятор JavaScript
  • компилятор PHP
  • Компилятор C#
  • Свяжитесь с нами
  • Политика конфиденциальности
  • условия обслуживания
  • Подпишитесь на новые публикации

Techie Delight © 2023 Все права защищены.

Этот веб-сайт использует файлы cookie. Используя этот сайт, вы соглашаетесь с использованием файлов cookie, нашей политикой, условиями авторского права и другими условиями. Читайте наши Политика конфиденциальности. Понятно

Получить ключ по значению

Если элемент строки есть среди значений словаря, необходимо вывести соответствующий значению ключ. Если среди ключей — то вывести значение по ключу значение. Вывести необходимо в две строки, значения отдельно от ключей. Т.е. для строки ‘a3a2c’ ожидаемый вывод ‘113’ и ‘cb’ Как вывести значения по ключу, я разобрался:

for i in stroka: if i in d.keys(): print(d[i], end='') 

А вот вывести ключ по значению у меня не получается:

for j in stroka: if j in d.values(): print(. end='') 

Отслеживать
47.5k 17 17 золотых знаков 56 56 серебряных знаков 99 99 бронзовых знаков
задан 28 мар 2016 в 7:41
Sergey Mokhin Sergey Mokhin
343 3 3 золотых знака 5 5 серебряных знаков 12 12 бронзовых знаков

9 ответов 9

Сортировка: Сброс на вариант по умолчанию

d = < 1: '1', '2': 2, 3: '3', >def get_key(d, value): for k, v in d.items(): if v == value: return k print(get_key(d, '1')) print(get_key(d, 2)) print(get_key(d, 42)) 
1 2 None 

Вообще, когда мне нужно получать значение по ключу и ключ по значению, я завожу два словаря.

Отслеживать
ответ дан 28 мар 2016 в 7:47
76.7k 6 6 золотых знаков 54 54 серебряных знака 120 120 бронзовых знаков

Можно инвертировать словарь inv_d = и еще раз вывести значение по ключу. Но может есть еще способ? Что-то можно подставить в print в моем случае?

28 мар 2016 в 8:12

Функцию get_key, например. Или используя инвертированный словарь: for k in inv_d: print(inv_d[k]) . Тут у нас в k будет значение оригинального словаря и соответственно, мы будем получать и выводить ключи по значениям

28 мар 2016 в 8:47

Т.е. для строки ‘a3a2c’ ожидаемый вывод ‘113’ и ‘cb’

Если есть словарь d и коллекция ключей keys , то чтобы получить соответствующие значения, используя default значения для отсутствующих ключей:

def get_values(d, keys, default=None): return (d.get(k, default) for k in keys) 
d = s = 'a3a2c' print(''.join(get_values(d, s, ''))) # -> 113 inv_d = dict(zip(d.values(), d.keys())) print(''.join(get_values(inv_d, s, ''))) # -> cb 

Если хочется сразу отфильтровать отсутствующие ключи:

def get_existing_values(d, keys): return filter(None, map(d.get, keys)) 
>>> ''.join(get_existing_values(inv_d, s)) 'cb' 

Отслеживать
ответ дан 28 мар 2016 в 14:57
52.2k 11 11 золотых знаков 108 108 серебряных знаков 311 311 бронзовых знаков

for key in a: print ("%s -> %s" % (key, a[key])) #python3 

Отслеживать
ответ дан 6 сен 2017 в 19:19
21 1 1 бронзовый знак

d=dict(a='1',b='2',c='3') # первый словарь print(d) stroka = 'a3a2c' print('stroka=',stroka) for m in stroka: #поиск элементов из stroka в ключах d if m in d.keys(): #вывод значений этих лючей print('буква ', m, 'из строки "stroka" является ключом значения ', d[m]) s=[] for i in d.keys(): #второй s.append((d[i],i)) #словарь b=dict(s) #является обратным для первого #значения являются ключами, а ключи значениями stroka_=stroka for i in stroka_: #поиск элементов из stroka в значениях d if i in b.keys(): #вывод ключей этих значений print('цифра ', i, 'из строки "stroka" является значением ключа', b[i]) 

Но задача была бы чуть интересней, если бы представление значений словаря было не строчным, а целочисленным.

Поиск ключа по значению в словаре в Python

Обложка к статье

При работе с словарями в Python часто возникает необходимость найти ключ, соответствующий определенному значению. Это может быть полезно, когда требуется обратный доступ к данным или выполнение определенных операций на основе значений в словаре. В данной статье мы рассмотрим несколько методов поиска ключа по значению в словаре.

Мы представим вам несколько эффективных и удобных способов поиска ключа в словаре, позволяющих решить эту задачу с помощью различных подходов. Мы рассмотрим использование понимания списка, метода list.index() , метода dict.items() , лямбда-выражений с функцией filter() и модуля re для работы с регулярными выражениями.

Каждый метод будет представлен с примерами кода, который поможет вам лучше понять и применить эти подходы к своим проектам. Вы сможете выбрать наиболее подходящий способ в зависимости от ваших потребностей и предпочтений.

Поиск ключа по значению, используя понимание списка

При работе со словарями в Python может возникнуть необходимость найти ключи, соответствующие определенному значению. В таких случаях можно использовать понимание списка для эффективного поиска. Давайте рассмотрим пример с оценками студентов:

students = < "Alice": "A", "Bob": "B", "Charlie": "C", "Dave": "B", "Eve": "A" >target_grade = "B" keys = [key for key in students if students[key] == target_grade] print("Keys with target grade:", keys)

В этом примере у нас есть словарь students , в котором ключами являются имена студентов, а значениями — их оценки. Наша цель — найти все ключи (имена студентов), у которых оценка равна target_grade (B).

Мы используем понимание списка, создавая список keys . Мы перебираем ключи key в словаре students и проверяем, равно ли значение оценки students[key] целевой оценке target_grade . Если условие выполняется, мы добавляем соответствующий ключ key в список.

В результате выполнения кода мы получим следующий вывод:

Keys with target grade: ['Bob', 'Dave']

Таким образом, мы нашли ключи (имена студентов) с оценкой, равной «B», используя понимание списка. Этот подход позволяет эффективно находить ключи по заданному значению в словаре.

Поиск ключа по значению с помощью list.index()

В Python существуют различные способы поиска ключа по значению в словаре. Один из таких способов — использование метода list.index() в сочетании с преобразованием словаря в список.

Давайте рассмотрим пример, где мы ищем ключ по заданному значению в словаре с оценками студентов:

students = < "Alice": "A", "Bob": "B", "Charlie": "C", "Dave": "B", "Eve": "A" >target_grade = "B" keys = list(students.keys()) index = list(students.values()).index(target_grade) key = keys[index] print("Key with target grade:", key)

этом примере мы начинаем с создания списка keys , содержащего все ключи из словаря students . Затем мы используем метод list.index() для поиска индекса первого вхождения значения target_grade в списке значений словаря. После получения индекса мы можем получить соответствующий ключ из списка keys .

При выполнении кода мы получим следующий вывод:

Key with target grade: Bob

Таким образом, мы нашли ключ (имя студента) с оценкой «B», используя метод list.index() в сочетании с преобразованием словаря в список. Этот метод предоставляет удобный способ получить ключ, соответствующий заданному значению в словаре.

Обратите внимание, что при использовании данного метода, мы находим только первый встреченный ключ для данного значения.

Поиск ключа по значению с помощью dict.item()

В Python для поиска ключа по значению в словаре мы можем использовать метод dict.items() . Этот метод возвращает представление словаря в виде списка кортежей, каждый из которых содержит ключ и значение.

Рассмотрим пример, где мы ищем все ключи, соответствующие заданному значению в словаре с оценками студентов:

students = < "Alice": "A", "Bob": "B", "Charlie": "C", "Dave": "B", "Eve": "A" >target_grade = "B" keys = [key for key, value in students.items() if value == target_grade] print("Keys with target grade:", keys)

В данном примере мы используем генератор списка для прохода по каждому элементу из students.items() . Здесь students.items() возвращает список кортежей, содержащих пары ключ-значение. Затем мы проверяем, соответствует ли значение заданному target_grade и добавляем ключ в список keys .

При выполнении кода мы получим следующий вывод:

Keys with target grade: ['Bob', 'Dave']

Таким образом, мы нашли все ключи (имена студентов), у которых оценка равна «B», используя метод dict.items() . Этот метод предоставляет удобный способ получить доступ к парам ключ-значение в словаре и выполнить поиск ключа по значению.

Поиск ключа по значению с помощью лямбда-выражения и filter()

В Python для поиска ключа по значению в словаре мы можем использовать комбинацию лямбда-выражения и функции filter() . Функция filter() позволяет нам отфильтровать элементы из последовательности, основываясь на заданном условии.

Рассмотрим пример, где мы ищем ключи, соответствующие заданному значению в словаре с оценками студентов:

students = < "Alice": "A", "Bob": "B", "Charlie": "C", "Dave": "B", "Eve": "A" >target_grade = "B" keys = list(filter(lambda key: students[key] == target_grade, students)) print("Keys with target grade:", keys)

В данном примере мы создаем лямбда-выражение, которое проверяет соответствие значения по ключу в словаре students заданному target_grade . Затем мы используем функцию filter() для применения этого лямбда-выражения к каждому ключу в словаре. Результатом будет отфильтрованный итератор, который мы преобразуем в список с помощью list() .

При выполнении кода мы получим следующий вывод:

Keys with target grade: ['Bob', 'Dave']

Таким образом, мы нашли все ключи (имена студентов), у которых оценка равна «B», используя лямбда-выражение и функцию filter() . Этот подход предоставляет более компактный способ поиска ключей по значению в словаре.

Поиск ключа по значению с помощью модуля re

Следующий метод использует модуль re для поиска ключа по значению в словаре:

import re # Заданный входной словарь с оценками студентов students = < "Alice": "A", "Bob": "B", "Charlie": "A+", "David": "B+", "Eve": "C" ># Значение для поиска value = "B" # Создание регулярного выражения для точного совпадения значения pattern = re.compile(r'\b' + re.escape(value) + r'\b') # Поиск ключа по значению с использованием модуля re key = next((k for k, v in students.items() if pattern.search(v)), None) # Вывод результата if key: print("Ключ по значению", value, "найден:", key) else: print("Ключ по значению", value, "не найден")

В приведенном коде мы начинаем с определения входного словаря students , который содержит оценки студентов. Затем мы выбираем значение, которое мы хотим найти, и сохраняем его в переменную value . Например, мы можем искать студента с оценкой «B».

Далее мы создаем регулярное выражение, используя модуль re . В данном случае мы используем регулярное выражение, которое соответствует точному совпадению значения. Мы экранируем значение с помощью функции re.escape() для обработки специальных символов, которые могут быть в значении (например, если значение содержит символы, которые являются метасимволами в регулярных выражениях).

Затем мы используем генератор списка и функцию next() для прохода по парам ключ-значение в словаре students . Мы применяем функцию pattern.search() к значению и проверяем, соответствует ли значение регулярному выражению. Если найдено первое соответствие, мы прекращаем поиск и сохраняем ключ в переменную key . Если нет соответствия или словарь пустой, переменная key будет иметь значение None .

В конце мы проверяем значение переменной key . Если значение не равно None , это означает, что ключ по указанному значению был найден, и мы выводим сообщение о том, что ключ найден, и выводим сам ключ. В противном случае, если значение key равно None , это означает, что ключ по указанному значению не был найден, и мы выводим сообщение о том, что ключ не найден.

Таким образом, данный код позволяет найти ключ в словаре, соответствующий указанному значению, с использованием модуля re для более гибкого и точного поиска.

Вызов значений из словаря Python: методы .get() и .setdefault() вместо квадратных скобок

Вы всё ещё пользуетесь квадратными скобками? Тогда мы идём к вам.

Dana Moskvina / Skillbox Media

Цокто Жигмытов

Цокто Жигмытов

Кандидат философских наук, специалист по математическому моделированию. Пишет про Data Science, AI и программирование на Python.

Словарь в Python — это набор из пар «ключ: значение». Основные его свойства:

  • В каждой паре ключ (key) указывает на значение (value).
  • Ключи уникальны, повторов нет. Значения могут быть одинаковыми.
  • В отличие от списка или кортежа, словарь не упорядочен, то есть нельзя указать, какая пара в нём идёт первой, а какая последней.

Ключ от значения отделяется двоеточием, а пары разделяются запятыми. Весь словарь заключён в фигурные скобки <>.

Обычный (не слишком хороший) способ

Первый способ, который узнают начинающие питонисты, — это вызов значений с помощью квадратных скобок. Пишется имя словаря, а за ним в квадратных скобках идёт ключ. Если Python находит такой ключ в словаре, то возвращает соответствующее ему значение.

author = < "first_name": "Виктор", "last_name": "Пелевин", "username": "dao1962" > author['username'] >>> 'dao1962' author['age'] >>> Traceback (most recent call last): File "", line 1, in module> author['age'] KeyError: 'age'

Если же такого ключа нет, то вернётся исключение KeyError. И это, надо сказать, довольно неприятно, особенно в случае с объёмными и часто изменяющимися данными.

Путей решения этой проблемы несколько:

  • Использовать конструкцию try / except (схожую с условным оператором if / else), которая будет обрабатывать KeyError и возвращать не само исключение, а что-то более удобное для работы — например, сообщение.
try: author['age'] except KeyError: print('Такого ключа нет') >>> 'Такого ключа нет'
  • Использовать встроенную библиотеку collections, а конкретно структуру defaultdict из неё — расширение над обычным словарём, позволяющее устанавливать значения по умолчанию для запрошенных несуществующих ключей.

Но есть и третий способ, даже два. Словарь в Python поддерживает встроенные методы вызова значения .get() и .setdefault(), которые позволяют обойтись без обработки исключений и импорта библиотек. Их мы и рассмотрим.

Вызов с помощью .get()

Пожалуй, самый безопасный способ вызова значений из словаря. У него два параметра:

  • Первый (обязательный) — ключ, значение которого мы хотим вызвать.
  • Второй (опциональный) — значение, которое вернёт метод, если ключа в словаре не существует. По умолчанию оно равно None — его метод и вернёт.
author.get('first_name') >>> 'Виктор' author.get('age') # ничего не происходит print(author.get('age')) # поэтому используем print >>> None author.get('age', 'Такого ключа в словаре нет') >>> 'Такого ключа в словаре нет'

Если ключ в словаре существует, то вызов .get() ничем не отличается от вызова с помощью квадратных скобок. Если же ключа нет, то метод возвращает второй параметр — либо None, либо, например, строку с сообщением.

И не надо обрабатывать ошибки и исключения.

Вызов с помощью .setdefault()

Иногда может понадобиться не только защита от ошибки KeyError, но и исправление самого словаря. Для этого применяется метод .setdefault(), который по синтаксису и выводу похож на .get() и принимает те же два параметра: вызываемый ключ и его значение по умолчанию.

Обнаружив, что вызываемого ключа не существует, метод .setdefault():

  • сам создаёт ключ;
  • создаёт к нему в пару значение, заданное вами (по умолчанию — None);
  • добавляет получившуюся пару в словарь;
  • возвращает значение.

Если вы не указали второй параметр, он вернёт None, то есть ничего.

author.setdefault('middle_name') # None - значит ничего author # добавился ключ 'middle_name' со значением None >>> < 'first_name': 'Виктор', 'last_name': 'Пелевин', 'username': 'dao1962', 'middle_name': None, > author.setdefault('book', 'Омон Ра') >>> 'Омон Ра' author >>> < 'first_name': 'Виктор', 'last_name': 'Пелевин', 'username': 'dao1962', 'middle_name': None, 'book': 'Омон Ра', >

Обратите внимание, что этот метод не меняет значения у существующих ключей.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *