JavaRush /Курсы /Модуль 1: Python Core /Коллекция Dictionary

Коллекция Dictionary

Модуль 1: Python Core
7 уровень , 0 лекция
Открыта

1.1 Словарь и его свойства

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

Основные свойства словарей:

1. Уникальные ключи

Каждый ключ в словаре должен быть уникальным. Если в словарь добавляется пара ключ-значение с ключом, который уже существует, старое значение будет заменено новым. Например, если вы хотите хранить данные о студентах и используете их идентификаторы как ключи:


students = {"123": "John", "124": "Alice", "123": "Mike"}
print(students)  # Выведет: {'123': 'Mike', '124': 'Alice'}

2. Упорядоченность

Важно! До версии Python 3.7 словари были неупорядоченными коллекциями, то есть порядок элементов не гарантировался. Начиная с Python 3.7, словари сохраняют порядок добавления элементов, но этот аспект не является обязательной частью спецификации языка до версии Python 3.8, где он стал стандартным.

Это было 5 лет назад. Мы изучаем Python на основе версии 3.12 поэтому можете смело рассматривать словарь как упорядоченный набор элементов.

3. Изменяемость

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


student = {"name": "John", "age": 20}
student["address"] = "123 Main St"
print(student)  # Выведет: {'name': 'John', 'age': 20, 'address': '123 Main St'}

4. Эффективность

Словари оптимизированы для быстрого поиска, добавления и удаления пар ключ-значение. В среднем, операции поиска, добавления и удаления выполняются за постоянное время, O(1). Что такое сложность алгоритмов вы узнаете немного позже, когда мы будем изучать темы «Алгоритмы и структуры данных».

5. Ключи и значения

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

6. Методы доступа и изменения

Словари поддерживают различные методы для доступа к элементам, добавления, изменения и удаления пар ключ-значение. Некоторые из этих методов включают get(), keys(), values(), items(), update(), pop(), и другие. Более подробно в следующих лекциях.

7. Перебор элементов

Вы можете перебирать ключи, значения или пары ключ-значение в словаре с помощью циклов. Это позволяет легко выполнять операции над элементами словаря. Например:


student = {"name": "John", "age": 20, "address": "123 Main St"}
for key, value in student.items():
    print(f"{key}: {value}")

Вывод будет:

name: John
age: 20
address: 123 Main St

8. Хэшируемость ключей

Ключи в словаре должны быть хэшируемыми (от слова hash). Это означает, что ключи должны иметь хэш-значение, которое не меняется в течение их жизни. Хэш-значение получают с помощью хэш-функции, алгоритма, который преобразует входные данные произвольной длины в выходное значение фиксированной длины. Именно его и называют хэш-значением или хэш-кодом. Неизменяемые типы данных, такие как строки, числа и кортежи, являются хэшируемыми и могут использоваться в качестве ключей.

Подробнее хэш-функции и хэшируемость мы изучим в теме «Алгоритмы и структуры данных».

1.2 Создание словаря с помощью {}

Словари (dictionaries) в Python можно создавать несколькими способами. Вот различные способы создания объекта словаря с примерами:

Использование фигурных скобок {}

Наиболее распространенный способ создания словаря — это использование фигурных скобок с парами ключ-значение, разделенными запятыми. Сама пара ключ-значение разделяется двоеточием.


# Создание пустого словаря
empty_dict = {}

# Создание словаря с элементами
person = {
    "name": "John",
    "age": 30,
    "city": "New York"
}
print(type(person))
print(person)

Важно! Создание словаря похоже на создание множества. В принципе можно даже рассматривать словарь как множество, состоящее из ключей, к которым привязаны значения.

Если в фигурных скобках просто перечислены «ключи», то создается множество, если после ключей стоит двоеточие и указаны значения, то создается словарь. Пустые фигурные скобки – всегда словарь.


# Создание пустого словаря
empty_dict = {}

# Создание множества с элементами
unique_items = {
    "name",
    "age",
    "city"
}
print(type(unique_items))
print(unique_items)

1.3 Создание словаря с помощью функции dict()

Функция dict() может использоваться для создания словаря из последовательности пар ключ-значение, а также из именованных аргументов.

Пример с последовательностью пар ключ-значение:


# Создание словаря из списка кортежей
person = dict([("name", "John"), ("age", 30), ("city", "New York")])
print(person)

Пример с именованными аргументами. Дополнительные скобки тут не нужны:


# Создание словаря с именованными аргументами
person = dict(name="John", age=30, city="New York")
print(person)

Использование метода dict.fromkeys()

Метод fromkeys() создает словарь с заданными ключами и значением по умолчанию.


# Создание словаря с ключами и значением по умолчанию
keys = ["name", "age", "city"]
default_value = None
person = dict.fromkeys(keys, default_value) 
print(person)

Словарь будет иметь три ключа, но все они будут содержать одно значение.

1.4 Создание словаря из существующих переменных

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


# Создание словаря из переменных
name = "John"
age = 30
city = "New York"

person = {"name": name, "age": age, "city": city}
print(person)

1.5 Использование генераторов словарей

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


# Создание словаря с помощью генератора словаря
squares = {x: x**2 for x in range(1, 6)}
print(squares)

1.6 Обращение к значениям в словаре

Чтобы получить значение по ключу, используется синтаксис []:


# Обращение к значениям в словаре
person = {"name": "John", "age": 30, "city": "New York"}
print(person["name"])  # Выведет: John

Важно! Если ключ не найден, возникнет ошибка KeyError. Чтобы избежать этого, можно использовать метод get(), который возвращает значение по ключу, если ключ существует, или None (или другое значение по умолчанию), если ключ не найден.


# Использование метода get() для обращения к значениям в словаре
person = {"name": "John", "age": 30, "city": "New York"}
print(person.get("name"))  # Выведет: John
print(person.get("address", "Адрес не найден"))  # Выведет: Адрес не найден

1.7 Изменение значений в словаре

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


# Изменение значений в словаре
person = {"name": "John", "age": 30, "city": "New York"}
person["age"] = 31
print(person)  # Выведет: {'name': 'John', 'age': 31, 'city': 'New York'}

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

Элементы можно удалять с помощью оператора del или метода pop().


# Удаление элемента с помощью del
person = {"name": "John", "age": 30, "city": "New York"}
del person["age"]
print(person)  # Выведет: {'name': 'John', 'city': 'New York'}

# Удаление элемента с помощью pop()
person = {"name": "John", "age": 30, "city": "New York"}
age = person.pop("age")
print(person)  # Выведет: {'name': 'John', 'city': 'New York'}
print(age)     # Выведет: 30

1.9 Проверка наличия ключа в словаре

Вы можете проверить, содержится ли ключ в словаре, используя оператор in.


# Проверка наличия ключа в словаре
person = {"name": "John", "age": 30, "city": "New York"}
print("name" in person)  # Выведет: True
print("address" in person)  # Выведет: False

1.10 Перебор элементов словаря

Вы можете перебирать ключи, значения или пары ключ-значение в словаре:


# Перебор ключей словаря
person = {"name": "John", "age": 30, "city": "New York"}
for key in person:
    print(key)

# Перебор значений словаря
for value in person.values():
    print(value)

# Перебор пар ключ-значение словаря
for key, value in person.items():
    print(f"{key}: {value}")

1.11 Примеры использования словарей в реальных задачах

Рассмотрим несколько примеров из реальной жизни, где использование словарей может быть полезным:

Пример 1: Подсчет частоты слов в тексте

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


text = "hello world hello"
word_count = {}
for word in text.split():
    if word in word_count:
        word_count[word] += 1
    else:
        word_count[word] = 1
print(word_count)  # Выведет: {'hello': 2, 'world': 1}

Пример 2: Хранение данных о студентах

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


students = {
    "123": {"name": "John", "age": 20, "major": "Computer Science"},
    "124": {"name": "Alice", "age": 22, "major": "Mathematics"}
}
print(students["123"]["name"])  # Выведет: John

Пример 3: Телефонная книга

Словари можно использовать для создания простой телефонной книги, где ключами будут имена, а значениям —телефонные номера.


phone_book = {
    "John": "123-456-7890",
    "Alice": "987-654-3210"
}
print(phone_book["Alice"])  # Выведет: 987-654-3210
2
Задача
Модуль 1: Python Core, 7 уровень, 0 лекция
Недоступна
Словарь.
Словарь.
2
Задача
Модуль 1: Python Core, 7 уровень, 0 лекция
Недоступна
Запаковка
Запаковка
Комментарии (16)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anonymous #3399726 Уровень 14
9 ноября 2025
Раз 30 перечитал условия второй задачи. В итоге, сделал всё по пунктам и получилось. Хорошая задачка, понравилась
Pavel Khaliullin Уровень 11
20 сентября 2025
Длинная, напичканная немного всем лекция 👎
Slevin Уровень 57
27 июня 2025
Валидатор второй задачи проверяет условие по-дебильному: - требуемый им тип данных должен находиться СТРОГО на первом месте. При этом в описании условия "должен содержать хотя бы один" - про первое место ничего не сказано.
Peter Уровень 6
25 сентября 2025
Ошибка в чём то другом, у меня все требуемые элементы находились или на 2 или на 3 месте, всё прошло с первого раза.
Slevin Уровень 57
26 сентября 2025
Как показал 3 месячный опыт изучения разных курсов на этом ресурсе - валидатор может не принимать решение 10 раз подряд и принять его на 11й, даже если в нем ничего не менять. В общем раз на раз не приходится.
Peter Уровень 6
26 сентября 2025
Печалька...
Long_byte Уровень 60
17 июня 2025

text = "hello world hello"
word_count = {}
for word in text.split():
    if word in word_count:
        word_count[word] += 1
    else:
        word_count[word] = 1
print(word_count)  # Выведет: {'hello': 2, 'world': 1}
разве здесь не возникнет ошибка ведь word_count изначально пустой
Peter Уровень 6
25 сентября 2025
нет, потому что когда мы обращаемся к несуществующему ключу и присваиваем единицу, этот ключ содаётся автоматически и так эе сразу присваивает 1 ключу.
Денис Уровень 16
5 марта 2025
По поводу 2 задачи. Если решать (упаковывать) от обратного (начиная со строки) - все получилось с первого раза)
Александр Уровень 30
4 февраля 2025
{1: [{2: ['3']}]}
Александр Уровень 19 Expert
25 января 2025
всем удачи ребята. вторая задача огонь ))) очень хотелось подсмотреть решение. делайте в PyCharm, там хоть ошибки будут подсказывать что исправить. и не усложняйте структуру списков и словарей, написано в задании "должен быть хотя бы один элемент", лучше один элемент и оставьте ))) меня валидатор пропустил, когда поудалял из списков и словарей лишние записи...
Natalia Уровень 42
9 июня 2025

my_dict = {'key': [{'key': ['my string']}]}
print(my_dict)
Александр Уровень 19 Expert
25 января 2025
Если у вас как и у меня уже голова пошла кругом от скобок, и тонкостей их использования, предлагаю привести знания в систему: Использование скобок в Python
Олексій Єрмак Уровень 25
15 января 2025
по-тихоньку мозг начинает закипать от прочитанного
Виктор Уровень 25
15 декабря 2024
квадратные скобки ... запутаться можно