В этом уроке Python я объясню, что такое понимание словаря Python и рассмотрим различные методы с помощью некоторых примеров на основе сценариев и то, чем понимание dict Python отличается от понимания списка.
- Что такое понимание словаря
- Метод 1: базовое понимание
- Метод 2: с несколькими ключами
- Метод 3: с использованием if-else
- Метод 4: с использованием defaultdict
- Метод 5: с помощью двух списков
- Метод 6: замена ключей и значений
- Метод 7: из другого словаря
- Сравнение понимания Dict и понимания списков
Что такое понимание словаря
По своей сути понимание словаря 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'}
Метод 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']}
Метод 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 в 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 и понимания списков
Это подчеркивает разницу между пониманием списков (которое генерирует списки) и пониманием словаря (которое создает словари). Оба являются синтаксическими инструментами Python, которые позволяют выполнять краткую итерацию и преобразование итерируемых объектов.
Сценарий для понимания списков. Используя генератор списков в Python, давайте создадим список длин названий некоторых озер США.
lakes = ['Lake Tahoe', 'Lake Superior', 'Lake Erie'] lake_lengths = [len(lake) for lake in lakes] print(lake_lengths)
Результат:
[10, 13, 9]
Для понимания слов: используйте тот же список озер США.
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}