Абстракция словаря Python

Содержание
Введение
Синтаксис
Пример
Влияние уникальности ключей
Словарь из списка
Фильтрация с помощью if
Похожие статьи

Введение

Dict Comprehension - Абстракция словарей.

Похоже на List Comprehension но создаёт не список а словарь.

Базовый синтаксис

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

new_dict = {key_expression: value_expression for member in iterable}

{ key_expr(item): value_expr(item) for item in iterable }

Нужно помнить, о том, что перебор значений в словарях отличается от перебора в списках .

Для применения Dict Comprehension подходит использование метода items()

Пример

Создадим словарь вида страна-столица и переделаем его в столица-страна с помощью Dict Comprehension

country_to_capital = { "Armenia": "Yerevan", "Finland": "Helsinki", "Germany": "Berlin", "Sweden": "Stockholm" } capital_to_country = {capital: country for country, capital in country_to_capital.items()} from pprint import pprint as pp pp(capital_to_country)

python dict_compreh.py

{'Berlin': 'Germany', 'Helsinki': 'Finland', 'Stockholm': 'Sweden', 'Yerevan': 'Armenia'}

Влияние уникальности ключей

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

Создадим словарь из списка стран. В качестве ключа будем использовать первую букву названия страны

countries = ["Armenia", "Austria", "Germany", "Georgia"] a = {c[0]: c for c in countries} print(a)

python dict_compreh.py

{'A': 'Austria', 'G': 'Georgia'}

Армения и Германия не попали в список, потому что их ключи "A" и "G" были перезаписаны аналогичными ключами от Австрии и Грузии.

Сложность

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

import os import glob from pprint import pprint as pp file_sizes = {os.path.realpath(p): os.stat(p).st_size for p in glob.glob('*.py')} pp(file_sizes)

python dict_compreh.py

{'/home/andrei/dict_compreh.py': 283, '/home/andrei/subprocess_ex.py': 102, '/home/pydantic_ex.py': 155}

Фильтрация с помощью if

При использовании Dict Comprehension можно применять условия для выбора нужных объектов.

from math import sqrt from pprint import pprint as pp def is_prime(x): if x < 2: return False for i in range(2, int(sqrt(x)) + 1): if x % i == 0: return False return True prime_square_divisors = {x*x: (1, x, x*x) for x in range(20) if is_prime(x)} pp(prime_square_divisors)

python filtering_compreh.py

{4: (1, 2, 4), 9: (1, 3, 9), 25: (1, 5, 25), 49: (1, 7, 49), 121: (1, 11, 121), 169: (1, 13, 169), 289: (1, 17, 289), 361: (1, 19, 361)}

Похожие статьи
Built-in Collections
Строки
f-string
format string
Списки []
list comprehension: Абстракция списка
Словари {:}
dict comprehension: Абстракция словаря
Множества {}
set comprehension: Абстракция множества
Кортежи ()
Протоколы
Итерация
Python
if, elif, else
Циклы

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: