13 Июн 2022
7 мин
19729

Как работать со словарями в Python

Словарь создают с помощью ключевого слова dict, синтаксиса языка.

Содержание

Словарь — это структура данных, которая позволяет записывать и получать различные значения по ключу. В некоторых языках ключами и значениями словаря могут быть только специфические объекты. А в Python — любые сущности: вплоть до пользовательских классов.

Как работать со словарями в Python

🚀 Создать

Ключевое слово dict

В Python есть множество встроенных функций. В том числе, чтобы получить стандартные структуры данных или преобразовать объекты к этим структурам. Если нужно создать пустой словарь, напишите:

my_new_dict = dict()

Синтаксическая конструкция

Еще, чтобы получить объект словаря, можно использовать синтаксис языка:

another_dict  = {"string_key": "the value", 2: "another value"}

Выражение-генератор

Третий способ: применить выражение — генератор словаря. Это помогает составить словарь из пары итерируемых объектов, то есть объектов, которые можно повторять. Например:

list_one = ["one", "two", "three", "four", "five"]
list_two = [1, 2, 3, 4, 5]
the_dict = {}

for k, v in zip(list_one, list_two):
    the_dict[k] = v + 1

print(the_dict["one"])
2

print(the_dict["two"])
3

print(the_dict.keys())
dict_keys(['one', 'two', 'three', 'four', 'five'])

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

list_one = ["one", "two", "three", "four", "five"]
list_two = [1, 2, 3, 4, 5]

the_dict = dict(zip(list_one, list_two))

🚀 Получить значения

Для этого нужно обратиться к объекту словаря и указать нужный ключ:

the_dict = {0: "A", 1: "B", 2: "C", 3: "D", 4: "E"}

let_a = the_dict[0]
let_b = the_dict[1]

print(f"{let_a}{let_b} -- {the_dict[2]}{the_dict[3]}")
AB -- CD

🚀 Добавить, изменить и удалить элементы

Нужно обратиться по ключу к объекту словаря, выполнить операцию присваивания:

# добавление элементов
the_dict = {}
the_dict["my_key"] = "some value"
the_dict["my_another_key"] = 42

# изменение элементов
the_dict["my_key"] = "yet another value"

# удаление элементов
del the_dict["my_key"]

🚀 Проверить наличие ключа

Чтобы проверить, есть ли указанный ключ в словаре, используйте ключевое слово in или метод get словаря:

the_dict = {"a": 1, "b": 2}

print("c" in the_dict)
False

print("a" in the_dict)
True

Метод get объекта словаря возвращает найденное значение в словаре по ключу. Или значение, указанное как стандартное возвращаемое, — если ключ не найден:

the_dict = {"a": 1, "b": 2}

if not the_dict.get("A", None):
    print("Такой ключ не найден")
Такой ключ не найден

a = the_dict.get("a", None)
print(a)
1

🚀 Скопировать словарь

Чтобы получить неглубокую копию, вызовите метод copy или примените метод модуля copy: copy.copy. Если нужна глубокая, нужен метод copy.deepcopy.

import copy

the_dict = {1: "a", 2:"b"}

dict_copy = the_dict.copy()
dict_copy2 = copy.copy(the_dict) # то же самое, что и в примере выше

deep_copy = copy.deepcopy(the_dict) # полная, глубокая копия

🚀 Определить длину словаря

Узнайте, сколько ключей содержит словарь, с помощью встроенной функции len. Она возвращает количество итерируемых объектов.

the_dict = {"a": 1, "b": 2}
length = len(the_dict)
print(length)
2

Этому учат на курсе Skypro «Python-разработчик». Программа построена так, что вы упражняетесь на реальных задачах, а не просто изучаете отдельные блоки. В результате свои курсовые работы сможете положить в портфолио, чтобы повысить шансы найти хорошую работу еще в процессе обучения.

Итерация словаря

Ключи, значения или всё вместе получают с помощью трех методов словаря. Для ключей — keys, для значений — values, для ключей и значений — items. Вызывать метод keys необязательно, так как при попытке итерации по словарю по умолчанию будут использоваться его ключи. По всем полученным данным можно произвести итерацию — повторить какое-либо действие.

✔️ По ключам

the_dict = {"a": 1, "b": 2}

for k in the_dict.keys():
    print(k)
    print(the_dict[k])
a
1
b
2

Keys используется по умолчанию, чтобы получить объект итератора:

the_dict = {"a": 1, "b": 2}

for k in the_dict: # вызова keys не происходит
    print(k)
    print(the_dict[k])
a
1
b
2

✔️ По значениям

the_dict = {"a": 1, "b": 2}

for v in the_dict.values():
    print(v)
1
2

✔️ По ключам и значениям

Пример распаковки кортежа вида «ключ, значение», чтобы сохранить их в отдельные переменные:

the_dict = {"a": 1, "b": 2}

for k, v in the_dict.items():
    print(f"{k} - {v}")
a - 1
b - 2

Другие методы

✔️ fromkeys

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

the_list = ["a", "b"]
the_dict = dict.fromkeys(the_list, False)

for v in the_dict.values():
    print(v)
False
False

for k in the_dict:
    print(k)
a
b

✔️ setdefault

Метод помогает указать стандартное значение ключа. При этом не изменять его, если оно уже есть по переданному ключу:

the_dict = {"a": 1, "b": 2}
the_dict.setdefault("a", True)

print(the_dict.keys())
dict_keys(['a', 'b'])

print(the_dict.get("a", None))
1

Изучить все методы можно на курсе Skypro «Python-разработчик». Опытные преподаватели-практики дадут необходимый минимум теории, помогут освоить практические навыки и поделятся лайфхаками разработки.

Вложенные словари

Словари могут содержать другие словари: в Python их называют вложенными. Они полезны при сериализации и десериализации. Их создают так:

the_dict = {"shape": "round", "size": 2}
nested_dict = {"first_color": "blue", "second_color": "red"}

the_dict["color"] = nested_dict

print(the_dict)
{'shape': 'round', 'size': 2, 'color': {'first_color': 'blue', 'second_color': 'red'}}

Альтернативные типы данных

В старых версиях Python ключи словаря не были упорядочены. Чтобы решить эту проблему, использовали модуль collections, а именно объект OrderedDict. Этот модуль тоже содержит и другие варианты словаря.

✔️ OrderedDict

Вместо типичной реализации по типу хеш-таблицы эта использует список кортежей, чтобы сохранять порядок ключей. В новых версиях языка в этом объекте уже нет смысла:

import collections

the_dict = collections.OrderedDict({"a": 1, "b": 2, 3: "c"})
print(the_dict)
OrderedDict([('a', 1), ('b', 2), (3, 'c')])

the_dict["d"] = "value"
print(the_dict)
OrderedDict([('a', 1), ('b', 2), (3, 'c'), ('d', 'value')])

✔️ Defaultdict

Объект класса defaultdict позволяет избежать ошибки KeyError при обращении к несуществующему ключу. Он возвращает стандартное значение, вычисляемое указанной функцией:

from collections import defaultdict

def get_value():
    return "Ключ не указан"

the_dict = defaultdict(get_value)
the_dict["a"] = 1
the_dict["b"] = 2

print(the_dict["a"])
1
print(the_dict["b"])
2
print(the_dict["c"])
Ключ не указан

✔️ Counter

Объект класса Counter полезен, когда нужно получить количество повторов объектов итерируемой сущности:

from collections import Counter

the_string = "AABCBBCAACBCABBABABBACCACBCBBBCA"
the_counter = Counter(the_string)
print(the_counter)
Counter({'B': 13, 'A': 10, 'C': 9})

Главное о работе со словарями в Python

  • Словари представляют структуру данных типа «ключ-значение». Их создают с помощью ключевого слова dict, синтаксической конструкции и выражения-генератора.
  • Метод copy позволяет скопировать словарь, метод get — проверить наличие ключа, функция len — определить длину словаря в Python.
  • В качестве ключа и значения можно использовать любую структуру данных.
  • Ключи, значения или всё вместе получают с помощью трех методов словаря: keys, values, items.

Изучайте Python на онлайн-курсе от Skypro «Python-разработчик». Программа под силу даже тем, у кого нет опыта в IT. Преподаватели — практикующие разработчики с опытом найма и наставничества.

После курса у вас будет достаточно опыта и знаний, чтобы претендовать на позиции младшего разработчика в компаниях или брать проекты на фрилансе. А еще мы поможем составить цепляющее резюме и подготовиться к вопросам рекрутеров на собеседованиях.

Содержание

Добавить комментарий

Определи профессию по рисунку
Пройдите тест, узнайте какой профессии подходитеНачать тест
+