Функциональное программирование (6 серии деталей)
Следуя от моего Список понимания Сообщение, я добавил сообщение здесь для понимания словаря. Как я нахожу это действительно компактными и выразительными по сравнению с для
петля.
Создайте дикт из списка
Создайте словарь из итерабильного. Вы должны указать оба Ключ: значение
в выводе.
Здесь мы конвертируем список в словарь, используя элемент списка в качестве ключа и вычисленное значение в качестве значения.
def square(x): return x**2 a = [1, 2, 3] b = { x: square(x) for x in a } b # {1: 1, 2: 4, 3: 9}
Преобразовать дикт
Вы можете использовать постижение словаря для преобразования словаря.
Вы можете использовать dict.items ()
распаковать дикта
в список кортежей, где каждая корзина (ключ, значение)
Анкет
my_dict = {'A': 1, 'B': 2, 'C': 3} my_dict.items() dict_items([('A', 1), ('B', 2), ('C', 3)])
Здесь мы распаковываем дикт как k
для ключа и V
Для значения, затем квадрайте значение и сохраните ключ. Потому что мы используем dict.items ()
, нам разрешено распаковать как K, V
И не только k
Анкет
def square(x): return x**2 my_dict = {'A': 1, 'B': 2, 'C': 3} squared_dict = {k: square(v) for k, v in my_dict.items()} squared_dict # {'A': 1, 'B': 4, 'C': 9}
Отфильтруйте дикт
Вы можете использовать Если
Заявление в словарном понимании.
my_dict = {'A': 1, 'B': 2, 'C': 3} filtered_dict = {k: v for k, v in my_dict.items() if v < 3} filtered_dict # {'A': 1, 'B': 2}
Инвертировать дикт
Чтобы изменить ключи и значения A дикта
:
my_dict = {'A': 1, 'B': 2, 'C': 3} inverse = {v: k for k, v in my_dict.items()} inverse # {1: 'A', 2: 'B', 3: 'C'}
Преобразовать список кортежей в дикта
Здесь у нас есть список кортежей, которые являются парами ключей.
a = [ ('A', 1), ('B', 2), ('C', 3) ]
Вот как мы можем преобразовать это с помощью словарного понимания:
b = {x[0]: x[1] for x in a} b # {'A': 1, 'B': 2, 'C': 3}
Вместо использования индексов как 0
и 1
, мы можем распаковать кортеж в k
и V
Анкет
k, v = ('A', 1) k # 'A' v # 1
Применяя это:
b = {k: v for k, v in a} b # {'A': 1, 'B': 2, 'C': 3}
Альтернатива с использованием дикта
Я хотел бы выделить, используя вызов dict ()
Для достижения аналогичных результатов с использованием понимания словаря.
Мне нравится более короткий синтаксис диктат
, хотя это менее гибко.
Вы должны позвонить дикта
Использование итерационных пар клавишных значений. Например, список кортежей, как показано ниже.
a = [ ('A', 1), ('B', 2), ('C', 3) ] b = dict(a) b # {'A': 1, 'B': 2, 'C': 3}
Это дало тот же результат, что и использование словарного понимания, но в меньшем коде.
{k: v for k, v in a}
Вот еще одна ситуация, когда вы могли бы передать итерабильно, чтобы дикта
Анкет
from collections import Counter x = ['A', 'A', 'B', 'C', 'D', 'D', 'D', 'E'] y = Counter(x) y # Counter({'D': 3, 'A': 2, 'B': 1, 'C': 1, 'E': 1}) dict(y) # {'A': 2, 'B': 1, 'C': 1, 'D': 3, 'E': 1}
Ссылки
Заинтересованы в большем количестве моего письма на Python? У меня есть 3 основных места, где я собираю материал Python, который полезен для меня.
- Тема Python на изучение кода – Хорошо для начинающих, но список ресурсов будет полезен для всех уровней.
- Python Cheatsheets
- Рецепты питона
Вот все мои Python Repos на GitHub Если вы хотите увидеть, что мне нравится строить.
Функциональное программирование (6 серии деталей)
Оригинал: “https://dev.to/michaelcurrin/dict-comprehensions-in-python-3hl7”