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

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

Содержание

Метод 1: с помощью цикла for с функцией item()

В Python поиск ключа по значению в словаре с использованием цикла for и метода items() включает перебор всех пар ключ-значение в словаре и проверку, соответствует ли текущее значение желаемому значению.

Если совпадение найдено, возвращается соответствующий ключ. Если цикл завершается и совпадение не найдено, возвращается None (или какое-либо другое значение по умолчанию), указывающее, что для данного значения ключ не найден.

Пример. Давайте воспользуемся сценарием, в котором у нас есть словарь, представляющий столицы различных штатов США. Попробуем найти государство по его столице.

Вам дана задача разработать простую систему, которая принимает название столицы и возвращает соответствующее состояние. Для простоты мы рассмотрим несколько штатов и их столицы:

state_capitals = {
    'California': 'Sacramento',
    'Texas': 'Austin',
    'New York': 'Albany',
    'Florida': 'Tallahassee',
    'Illinois': 'Springfield'
}
def find_state_by_capital(capitals_dict, capital):
    for state, cap in capitals_dict.items():
        if cap == capital:
            return state
    return None

capital_input = 'Austin'
state_name = find_state_by_capital(state_capitals, capital_input)
print(f"The state with the capital {capital_input} is {state_name}.")

Вывод: мы определяем функцию find_state_by_capital, которая принимает словарь Python и заглавную букву.

Мы используем цикл for для перебора элементов словаря. Для каждой итерации мы сравниваем текущий капитал(кап) с заданным капиталом.

Если есть совпадение, мы немедленно возвращаем соответствующее состояние. Если цикл завершается и совпадение не найдено, мы возвращаем None.

The state with the capital Austin is Texas.

С помощью цикла for с функцией item()

Метод 2: использование понимания списка

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

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

Например: представьте, что мы создаем программу, в которой у нас есть словарь книг и их авторов на Python, и нам нужно найти авторов конкретных книг в списке.

authors_dict = {
    'To Kill a Mockingbird': 'Harper Lee',
    '1984': 'George Orwell',
    'Moby Dick': 'Herman Melville',
    'Pride and Prejudice': 'Jane Austen',
    'The Great Gatsby': 'F. Scott Fitzgerald',
}
book_titles = ['Harper Lee', 'Jane Austen']
author_names = [book for book, author in authors_dict.items() if author in book_titles]
print(author_names)

Вывод: мы перебираем словарь Python authors_dict, используя метод items(), который предоставляет название каждой книги и ее автора. Затем мы используем условие if book в book_titles, чтобы проверить, существует ли текущая книга в нашем списке book_titles Python. Если условие выполнено, мы добавляем имя автора в наш список результатов author_names.

['To Kill a Mockingbird', 'Pride and Prejudice']

Использование понимания списка 

Метод 3: используя функцию list.index()

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

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

people = {
    'Alice': 30,
    'Bob': 25,
    'Charlie': 35,
    'Diana': 40,
    'Eve': 22,
}
age_to_find = 35
ages = list(people.values())
names = list(people.keys())
index = ages.index(age_to_find)
name = names[index]
print(f"The name of the person with the age {age_to_find} is {name}")

Вывод: сначала мы преобразовали возраст и имена в два отдельных списка Python, возраст и имена. Затем мы нашли индекс возраста 35 лет в списке возрастов в Python, используя функцию index(). Этот индекс использовался для получения имени из списка имен Python. Наконец, мы распечатали выходные данные, показывающие, что имя человека в возрасте 35 лет — «Чарли».

The name of the person with the age 35 is Charlie

Метод 3: используя функцию list.index()

Метод 4: с помощью лямбда-функции и filter()

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

Имя Описание
Лямбда-функция В Python лямбда-функция — это анонимная функция, определенная с помощью ключевого слова лямбда. Он может иметь любое количество аргументов, но может иметь только одно выражение.
Функция filter Функция filter() принимает два аргумента: функцию и итерируемый объект. Он применяет функцию к каждому элементу в итерируемом объекте и возвращает итератор для тех элементов, для которых функция дает значение True.
Объединение функций filter() и лямбда Мы можем использовать лямбда-функцию в качестве первого аргумента функции filter(). Эта лямбда-функция будет сравнивать значение каждого элемента в словаре с желаемым значением. Функция filter() затем вернет итератор, содержащий элементы, соответствующие условию, установленному лямбда-функцией.

Например: давайте рассмотрим сценарий, основанный на данных о сотрудниках компании в США. Предположим, у нас есть словарь Python, который содержит идентификаторы сотрудников в качестве ключей и соответствующие им зарплаты в качестве значений. Мы хотим найти все идентификаторы сотрудников с определенной зарплатой.

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

employee_data = {
    'EMP123': 50000,
    'EMP124': 75000,
    'EMP125': 60000,
    'EMP126': 75000,
    'EMP127': 80000
}
salary = 75000
result = filter(lambda item: item[1] == salary, employee_data.items())
matched_items = list(result)
matched_employee_ids = [item[0] for item in matched_items]
print(f"The employee IDs for the salary {salary} are {matched_employee_ids}")

Вывод: в этом примере показано, как использовать функции filter() и лямбда для поиска ключей (в данном случае идентификаторов сотрудников) по связанным с ними значениям (в данном случае зарплатам) в словаре Python. В примере выходных данных идентификаторы сотрудников с зарплатой 75 000 — «EMP124» и «EMP126».

The employee IDs for the salary 75000 are ['EMP124', 'EMP126']

С помощью лямбда-функции и filter()

Как найти ключ с максимальным значением?

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

Один из наиболее кратких и читаемых способов найти ключ с максимальным значением в словаре Python — использовать функцию max(). Мы можем использовать ключевой параметр функции max(), чтобы указать функцию с одним аргументом для извлечения ключа сравнения из каждого входного элемента.

Пример. Давайте рассмотрим другой сценарий, связанный с американской платформой электронной коммерции, чтобы выяснить, какой продукт имеет наибольшее количество продаж.

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

product_sales = {
    'P12345': 1200,
    'P54321': 2500,
    'P11222': 1750,
    'P23456': 3200,
    'P67890': 1500
}
best_selling_product = max(product_sales, key=product_sales.get)
print(f"The product with the highest sales is {best_selling_product}.")

Вывод: затем распечатывается результат best_selling_product, в котором указывается продукт с наибольшим количеством продаж.

The product with the highest sales is P23456.

Как найти ключ с максимальным значением

Заключение

В этом руководстве объясняется, как в словаре Python найти ключ по значению, используя четыре различных метода, такие как цикл for с функцией dict.item(), понимание списка, функцию list.index(), а также лямбда-функции и filter() с примерами.

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