Рубрики
Без рубрики

Словарь понимание в Python

Следуя по сообщению моего списка понимания, я добавил сообщение здесь для понимания словаря …. Tagged с Python, Tuperial, Beginters, Functional.

Функциональное программирование (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 Repos на GitHub Если вы хотите увидеть, что мне нравится строить.

Функциональное программирование (6 серии деталей)

Оригинал: “https://dev.to/michaelcurrin/dict-comprehensions-in-python-3hl7”