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

Содержание

Что такое понимание словаря

По своей сути понимание словаря Python — это метод преобразования одного словаря в другой словарь с использованием одной строки кода.

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

В Python существует семь различных способов понимания словаря. Давайте рассмотрим их поочередно на наглядных примерах.

Метод 1: базовое понимание

Этот метод позволяет быстро создать словарь Python путем перебора итерируемого объекта. Элементы каждого кортежа напрямую сопоставляются с парами ключ-значение в результирующем словаре.

Синтаксис:

{key_expr: value_expr for item in iterable}

Где:

  • key_expr: выражение, определяющее ключ для каждой записи словаря Python.
  • value_expr: выражение, предоставляющее значение, соответствующее каждому ключу.
  • iterable: любой объект, который можно перебирать в цикле (например, список, кортеж, набор и т. д.).

Сценарий: предположим, что у нас есть список президентов США на языке Python и их годы рождения. Мы будем использовать понимание словаря, чтобы преобразовать этот список в словарь.

presidents_birth_years = [('George Washington', 1732),('Thomas Jefferson', 1743),('Abraham Lincoln', 1809)]
presidents_dict = {president: year for president, year in presidents_birth_years}
print(presidents_dict)

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

{'George Washington': 1732, 'Thomas Jefferson': 1743, 'Abraham Lincoln': 1809}

Базовое понимание

Метод 2: с несколькими ключами

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

Сценарий: Предположим, у нас есть список известных достопримечательностей и их состояний. Мы хотим создать словарь на Python, где каждому штату соответствует список его достопримечательностей.

landmarks = [('Statue of Liberty', 'New York'),('Mount Rushmore', 'South Dakota'),('Hollywood Sign', 'California')]
landmark_dict = {state: [landmark for landmark, s in landmarks if s == state] for landmark, state in landmarks}
print(landmark_dict)

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

{'New York': ['Statue of Liberty'], 'South Dakota': ['Mount Rushmore'], 'California': ['Hollywood Sign']}

С несколькими ключами

Метод 3: с использованием if-else

Мы также можем включить условия if-else в понимание dict в Python. Он может служить двум целям: фильтровать элементы на основе условия и изменять значения элементов на основе условия.

Сценарий: у нас есть диктат Python штатов США и их общая площадь. Мы хотим классифицировать штаты как «Большие», если их площадь превышает 100 000 квадратных миль, и «Маленькие» в противном случае, используя понимание dict, если иначе.

state_area = {'California': 163696, 'Rhode Island': 1034, 'Texas': 268596}
area_category = {state: 'Large' if area > 100000 else 'Small' for state, area in state_area.items()}
print(area_category)

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

{'California': 'Large', 'Rhode Island': 'Small', 'Texas': 'Large'}

С использованием if-else

Метод 4: с использованием defaultdict

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

Сценарий: давайте классифицируем города США по их начальной букве, используя комбинацию defaultdict и dict comprehension, эмулируя Python defaultdict comprehension.

from collections import defaultdict
us_cities = ['Denver', 'Detroit', 'Dallas', 'Boston', 'Baltimore']
city_dict_default = defaultdict(list)
{city_dict_default[city[0]].append(city) for city in us_cities}
print(dict(city_dict_default))

Результат: города группируются по начальным буквам с использованием defaultdict и словарного понимания в Python.

{'D': ['Denver', 'Detroit', 'Dallas'], 'B': ['Boston', 'Baltimore']}

С использованием defaultdict

Метод 5: с помощью двух списков

Случай 1: предполагает создание словаря с использованием двух списков: один список является ключами, а другой — значениями. Функция zip() обычно используется для объединения двух списков.

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

sports = ['baseball', 'basketball', 'football']
balls = ['baseball', 'basketball', 'football']

sports_ball_dict = {sport: ball for sport, ball in zip(sports, balls)}
print(sports_ball_dict)

Результат:

{'baseball': 'baseball', 'basketball': 'basketball', 'football': 'football'}

С помощью двух списков

Случай 2: мы также можем использовать общее понимание диктовок с функцией диапазона в Python.

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

states = ["California", "Texas", "New York"]
capitals = ["Sacramento", "Austin", "Albany"]

state_capital = {states[i]: capitals[i] for i in range(len(states))}
print(state_capital)

Результат:

{'California': 'Sacramento', 'Texas': 'Austin', 'New York': 'Albany'}

Функция диапазона в dict comp

Таким образом, мы можем использовать функцию диапазона в dict comp в Python.

Метод 6: замена ключей и значений

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

Сценарий: Давайте рассмотрим словарь Python, содержащий информацию о крупнейших производителях автомобилей в США и их штаб-квартирах.

car_manufacturer_location = {
    'Ford': 'Dearborn',
    'Tesla': 'Palo Alto',
    'Chevrolet': 'Detroit'
}
swapped_dict = {location: manufacturer for manufacturer, location in car_manufacturer_location.items()}
print(swapped_dict)

Результат:

{'Dearborn': 'Ford', 'Palo Alto': 'Tesla', 'Detroit': 'Chevrolet'}

Замена ключей и значений 

Метод 7: из другого словаря

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

Случай 1. Давайте рассмотрим сценарий, в котором у нас есть словарь Python со среднемесячными температурами в градусах Фаренгейта для различных городов США, и нам нужен словарь только с теми городами, где средняя температура превышает 70F.

avg_temps = {
    'Miami': 78,
    'Seattle': 60,
    'Los Angeles': 72,
    'Chicago': 65
}
warm_cities = {city: temp for city, temp in avg_temps.items() if temp > 70}
print(warm_cities)

Выход:

{'Miami': 78, 'Los Angeles': 72}

Из другого словаря

Таким образом, мы можем фильтровать словарь и создавать на его основе новый словарь, используя понимание словаря в Python.

Случай 2: предполагает выполнение некоторых арифметических операций над значениями (или ключами) из существующего словаря Python для создания нового.

Сценарий: Представьте, что мы изучаем среднее потребление безалкогольных напитков в литрах в разных штатах США, но имеющиеся у нас данные указаны в галлонах. Мы решили перевести эти значения из галлонов в литры(1 галлон равен примерно 3,78541 литра).

consumption_gallons = {
    'California': 20,
    'Texas': 15,
    'Florida': 18
}
consumption_liters = {state: gallons * 3.78541 for state, gallons in consumption_gallons.items()}
print(consumption_liters)

Выход:

{'California': 75.7082, 'Texas': 56.781150000000004, 'Florida': 68.13738000000001}

С помощью dict

Сравнение понимания Dict и понимания списков

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

Сценарий для понимания списков. Используя генератор списков в Python, давайте создадим список длин названий некоторых озер США.

lakes = ['Lake Tahoe', 'Lake Superior', 'Lake Erie']
lake_lengths = [len(lake) for lake in lakes]
print(lake_lengths)

Результат:

[10, 13, 9]

Сравнение понимания Dict и понимания списков в Python

Для понимания слов: используйте тот же список озер США.

lakes = ['Lake Tahoe', 'Lake Superior', 'Lake Erie']
lake_length_dict = {lake: len(lake) for lake in lakes}
print(lake_length_dict)

Результат:

{'Lake Tahoe': 10, 'Lake Superior': 13, 'Lake Erie': 9}

Понимание словаря Python

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