Словари (Dictionary) в Python

Словарь Python — это коллекция элементов, похожая на списки и кортежи. Однако, в отличие от списков и кортежей, каждый элемент словаря — это пара ключ-значение (состоящая из ключа и значения).


Создание словаря

Мы создаём словарь, помещая пары key: value в фигурные скобки {}, разделённые запятыми. Например:

# создание словаря
country_capitals = {
  "Germany": "Berlin",
  "Canada": "Ottawa",
  "England": "London"
}

# вывод словаря
print(country_capitals)

Вывод

{'Germany': 'Berlin', 'Canada': 'Ottawa', 'England': 'London'}

Словарь country_capitals содержит три элемента (пары ключ-значение), где 'Germany' — ключ, а 'Berlin' — присвоенное ему значение.

Словарь Python

Примечание

  • Ключи словаря должны быть неизменяемыми (immutable), например, кортежи, строки, целые числа. Мы не можем использовать изменяемые объекты, такие как списки, в качестве ключей.

  • Также можно создать словарь с помощью встроенной функции Python dict().

Допустимые и недопустимые словари

Ключи словаря должны быть неизменяемыми

Неизменяемые объекты нельзя изменить после создания. Это, например, целые числа, кортежи и строки.

# допустимый словарь
# целое число как ключ
my_dict = {1: "one", 2: "two", 3: "three"}

# допустимый словарь
# кортеж как ключ
my_dict = {(1, 2): "one two", 3: "three"}

# недопустимый словарь
# Ошибка: использование списка в качестве ключа запрещено
my_dict = {1: "Hello", [1, 2]: "Hello Hi"}

# допустимый словарь
# строка как ключ, список как значение
my_dict = {"USA": ["Chicago", "California", "New York"]}

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

Примечание

Значения словаря могут быть любого типа, включая изменяемые типы, такие как списки.

Ключи словаря должны быть уникальными

Если есть дублирующиеся ключи, более позднее значение перезаписывает предыдущее.

hogwarts_houses = {
    "Harry Potter": "Gryffindor",
    "Hermione Granger": "Gryffindor",
    "Ron Weasley": "Gryffindor",
    # дублирующийся ключ с другим факультетом
    "Harry Potter": "Slytherin"

}

print(hogwarts_houses)

Вывод

{'Harry Potter': 'Slytherin', 'Hermione Granger': 'Gryffindor', 'Ron Weasley': 'Gryffindor'}

Здесь ключ Harry Potter сначала присвоен Gryffindor. Однако есть вторая запись, где Harry Potter присвоен Slytherin. Поскольку дубликаты ключей не допускаются, последнее значение Slytherin перезаписывает предыдущее Gryffindor.


Доступ к элементам словаря

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

country_capitals = {
  "Germany": "Berlin",
  "Canada": "Ottawa",
  "England": "London"
}

# доступ к значению ключа
print(country_capitals["Germany"])    # Вывод: Berlin
print(country_capitals["England"])    # Вывод: London

Примечание

Также можно использовать метод get() для доступа к элементам словаря.


Добавление элементов в словарь

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

country_capitals = {
  "Germany": "Berlin",
  "Canada": "Ottawa",
}

# добавляем элемент с ключом "Italy" и значением "Rome"
country_capitals["Italy"] = "Rome"

print(country_capitals)

Вывод

{'Germany': 'Berlin', 'Canada': 'Ottawa', 'Italy': 'Rome'}

Удаление элементов словаря

Мы можем использовать оператор del для удаления элемента из словаря.

country_capitals = {
  "Germany": "Berlin",
  "Canada": "Ottawa",
}

# удаляем элемент с ключом "Germany"
del country_capitals["Germany"]

print(country_capitals)

Вывод

{'Canada': 'Ottawa'}

Примечание

Также можно использовать метод pop() для удаления элемента из словаря.

Если нужно удалить все элементы словаря сразу, используем метод clear().

country_capitals = {
  "Germany": "Berlin",
  "Canada": "Ottawa",
}

# очищаем словарь
country_capitals.clear()

print(country_capitals)

Вывод

{}

Изменение элементов словаря

Словари Python изменяемы. Мы можем изменить значение элемента словаря, ссылаясь на его ключ.

country_capitals = {
  "Germany": "Berlin",
  "Italy": "Naples",
  "England": "London"
}

# меняем значение ключа "Italy" на "Rome"
country_capitals["Italy"] = "Rome"

print(country_capitals)

Вывод

{'Germany': 'Berlin', 'Italy': 'Rome', 'England': 'London'}

Примечание

Также можно использовать метод update() для добавления или изменения элементов словаря.


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

Словарь — это упорядоченная коллекция элементов (начиная с Python 3.7), поэтому он сохраняет порядок элементов.

Мы можем итерироваться по ключам словаря, используя цикл for.

country_capitals = {
  "United States": "Washington D.C.",
  "Italy": "Rome"
}

# выводим ключи по одному
for country in country_capitals:
    print(country)

print()

# выводим значения по одному
for country in country_capitals:
    capital = country_capitals[country]
    print(capital)

Вывод

United States
Italy

Washington D.C.
Rome

Длина словаря

Можно определить длину словаря с помощью функции len().

country_capitals = {"England": "London", "Italy": "Rome"}

# получаем длину словаря
print(len(country_capitals))   # Вывод: 2

numbers = {10: "ten", 20: "twenty", 30: "thirty"}

# получаем длину словаря
print(len(numbers))            # Вывод: 3

countries = {}

# получаем длину словаря
print(len(countries))          # Вывод: 0

Методы словаря Python

Распространённые методы словаря:

Функция

Описание

pop()

Удаляет элемент с указанным ключом.

update()

Добавляет или изменяет элементы.

clear()

Удаляет все элементы.

keys()

Возвращает все ключи.

values()

Возвращает все значения.

get()

Возвращает значение указанного ключа.

popitem()

Возвращает последнюю вставленную пару (ключ, значение).

copy()

Возвращает копию словаря.


Проверка принадлежности

Мы можем проверить, существует ли ключ в словаре, с помощью операторов in и not in.

file_types = {
    ".txt": "Text File",
    ".pdf": "PDF Document",
    ".jpg": "JPEG Image",
}

# использование операторов in и not in
print(".pdf" in file_types)       # Вывод: True
print(".mp3" in file_types)       # Вывод: False
print(".mp3" not in file_types)   # Вывод: True

Примечание

Оператор in проверяет наличие ключа, а не значения.


Видео: словари Python для пар ключ/значение

См. также: Множества (Set) в Python, Функции в Python, Вложенный словарь в Python.