Генератор словарей в Python — использование на примерах
В этом уроке вы узнаете об использовании генератора словарей в Python для преобразования или фильтрации элементов в словаре.
- Что такое генератор словаря в Python?
- Примеры с генератором словаря Python
- 1) Преобразование словаря
- 2) Использование генератора для фильтрации словаря
Что такое генератор словаря в Python?
Генератор словаря (dictionary comprehension) позволяет вам запустить цикл for для словаря и выполнить что-то над каждым элементом, например преобразование или фильтрацию, и вернуть новый словарь.
В отличие от цикла for, словарное понимание предлагает более выразительный и краткий синтаксис, если вы его правильно используете.
Вот общий синтаксис для генератора словаря:
{key:value for(key,value) in dict.items() if condition}
Это выражение возвращает новый словарь, элемент которого указан key: value.
Примеры с генератором словаря Python
Мы рассмотрим, как использовать генератор словаря для преобразования и фильтрации элементов в словаре.
1) Преобразование словаря
Предположим, что у вас есть следующий словарь, элементами которого являются символ акции и цена:
stocks = { 'AAPL': 121, 'AMZN': 3380, 'MSFT': 219, 'BIIB': 280, 'QDEL': 266, 'LVGO': 144 }
Чтобы увеличить цену каждой акции на 2%, вы можете использовать такой цикл:
stocks = { 'AAPL': 121, 'AMZN': 3380, 'MSFT': 219, 'BIIB': 280, 'QDEL': 266, 'LVGO': 144 } new_stocks = {} for symbol, price in stocks.items(): new_stocks[symbol] = price*1.02 print(new_stocks)
Выход:
{'AAPL': 123.42, 'AMZN': 3447.6, 'MSFT': 223.38, 'BIIB': 285.6, 'QDEL': 271.32, 'LVGO': 146.88}
Как это работает.
- Сначала перебираем элементы словаря акций.
- Во-вторых, увеличим цену на 2% и добавим товар в новый словарь(new_stocks).
В следующем примере показано, как использовать генератор словаря для достижения того же результата:
stocks = { 'AAPL': 121, 'AMZN': 3380, 'MSFT': 219, 'BIIB': 280, 'QDEL': 266, 'LVGO': 144 } new_stocks = {symbol: price * 1.02 for(symbol, price) in stocks.items()} print(new_stocks)
Это эквивалентно аналогу цикла for:
для цикла
new_stocks = {} for symbol, price in stocks.items(): new_stocks[symbol] = price*1.02
понимание словаря
new_stocks = {symbol: price * 1.02 for(symbol, price) in stocks.items()}
2) Использование генератора для фильтрации словаря
Чтобы выбрать акции, цены которых превышают 200, вы можете использовать следующий цикл for:
stocks = { 'AAPL': 121, 'AMZN': 3380, 'MSFT': 219, 'BIIB': 280, 'QDEL': 266, 'LVGO': 144 } selected_stocks = {} for symbol, price in stocks.items(): if price > 200: selected_stocks[symbol] = price print(selected_stocks)
Как это работает.
- Сначала перебираем элемент словаря акций.
- Затем добавьте элемент в словарь selected_stocks, если цена превышает 200.
В следующем примере dictionary comprehension используется с предложением if для получения того же результата:
stocks = { 'AAPL': 121, 'AMZN': 3380, 'MSFT': 219, 'BIIB': 280, 'QDEL': 266, 'LVGO': 144 } selected_stocks = {s: p for(s, p) in stocks.items() if p > 200} print(selected_stocks)
И вы можете сравнить понимание цикла for и словаря:
для цикла
selected_stocks = {} for symbol, price in stocks.items(): if price > 200: selected_stocks[symbol] = price
понимание словаря
selected_stocks = {s: p for(s, p) in stocks.items() if p > 200}