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

Contents
Введение
Синтаксис
Пример
Влияние уникальности ключей
Словарь из списка
Фильтрация с помощью 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)}

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

Search on this site

Subscribe to @aofeed channel for updates

Visit Channel

@aofeed

Feedback and Questions in Telegram

@aofeedchat