Абстракция словаря 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)}

Article author: Andrei Olegovich

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

Search this site

Subscribe to Telegram channel @aofeed to follow new articles and updates to old ones

Go to channel

@aofeed

Ask a question in the Telegram group

@aofeedchat

Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su, info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: