Обзор словарей (dictionary) в Python: создание, методы и использование для хранения пар "ключ-значение".

онлайн тренажер по питону
Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Самоучитель Python 3, собранный из материалов данного сайта.Предназначен в основном для тех, кто хочет изучить язык программирования Python с нуля.

Что такое словарь (dictionary) в Python

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

Словари Python эффективно решают задачи быстрого поиска, хранения и организации данных, используя хеш-таблицы для обеспечения O(1) времени доступа к элементам.

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

Пустой словарь

my_dict = {}  # Пустой словарь
# или
my_dict = dict()  # Альтернативный способ создания пустого словаря

Инициализация словаря с данными

my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

Создание словаря из списка кортежей

pairs = [('name', 'John'), ('age', 30), ('city', 'New York')]
my_dict = dict(pairs)

Создание словаря из списка ключей и значений

keys = ['name', 'age', 'city']
values = ['John', 30, 'New York']
my_dict = dict(zip(keys, values))

Создание словаря с помощью генератора

# Простой генератор словаря
my_dict = {x: x**2 for x in range(1, 6)}

# Генератор с условием
my_dict = {x: x**2 for x in range(1, 11) if x % 2 == 0}
print(my_dict)  # Вывод: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}

Метод fromkeys()

keys = ['a', 'b', 'c']
default_value = 0
my_dict = dict.fromkeys(keys, default_value)
print(my_dict)  # Вывод: {'a': 0, 'b': 0, 'c': 0}

Поэтапное добавление элементов

my_dict = {}
my_dict['key1'] = 'value1'
my_dict['key2'] = 'value2'
my_dict['key3'] = 'value3'
print(my_dict)  # Вывод: {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

Основные операции со словарями

Обращение к элементам словаря

my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}

# Получение значения по ключу
print(my_dict['name'])  # Выведет: John

# Безопасное получение значения с помощью get()
print(my_dict.get('salary', 'Не указано'))  # Выведет: Не указано

# Изменение значения по ключу
my_dict['age'] = 31

# Добавление новой пары ключ-значение
my_dict['gender'] = 'male'

# Удаление элемента по ключу
del my_dict['city']

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

my_dict = {'name': 'John', 'age': 30}

# Проверка наличия ключа
if 'name' in my_dict:
    print("Ключ 'name' существует")

# Проверка отсутствия ключа
if 'salary' not in my_dict:
    print("Ключ 'salary' отсутствует")

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

Перебор ключей

my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}

# Перебор ключей
for key in my_dict:
    print(key)

# Явный перебор ключей
for key in my_dict.keys():
    print(key)

Перебор значений

# Перебор значений
for value in my_dict.values():
    print(value)

Перебор пар ключ-значение

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

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

Словари могут содержать другие словари в качестве значений, что позволяет создавать сложные структуры данных:

employees = {
    'emp1': {'name': 'John', 'age': 30, 'department': 'IT'},
    'emp2': {'name': 'Alice', 'age': 35, 'department': 'HR'}
}

# Доступ к вложенным данным
print(employees['emp1']['name'])  # Выведет: John

# Изменение вложенных данных
employees['emp1']['salary'] = 50000

# Добавление нового сотрудника
employees['emp3'] = {'name': 'Bob', 'age': 28, 'department': 'Marketing'}

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

Основные методы словаря

Метод Описание
keys() Возвращает представление всех ключей словаря
values() Возвращает представление всех значений словаря
items() Возвращает представление пар ключ-значение
get(key, default) Возвращает значение по ключу или default
pop(key, default) Удаляет и возвращает значение по ключу
popitem() Удаляет и возвращает произвольную пару
update(other_dict) Обновляет словарь данными из другого словаря
clear() Удаляет все элементы словаря
copy() Создает поверхностную копию словаря
setdefault(key, default) Возвращает значение или устанавливает default
fromkeys(keys, value) Создает словарь из ключей с одинаковым значением

Примеры использования методов

clear() - Очистка словаря

my_dict = {'a': 1, 'b': 2}
my_dict.clear()
print(my_dict)  # Вывод: {}

copy() - Создание копии

original_dict = {'a': 1, 'b': 2}
copied_dict = original_dict.copy()
print(copied_dict)  # Вывод: {'a': 1, 'b': 2}

get() - Безопасное получение значения

my_dict = {'a': 1, 'b': 2}
value = my_dict.get('a')
print(value)  # Вывод: 1

# С значением по умолчанию
value = my_dict.get('c', 'Не найдено')
print(value)  # Вывод: Не найдено

pop() - Удаление с возвратом значения

my_dict = {'a': 1, 'b': 2}
value = my_dict.pop('a')
print(value)  # Вывод: 1
print(my_dict)  # Вывод: {'b': 2}

popitem() - Удаление произвольной пары

my_dict = {'a': 1, 'b': 2}
item = my_dict.popitem()
print(item)  # Вывод: ('b', 2)
print(my_dict)  # Вывод: {'a': 1}

setdefault() - Установка значения по умолчанию

my_dict = {'a': 1, 'b': 2}
value = my_dict.setdefault('c', 3)
print(value)  # Вывод: 3
print(my_dict)  # Вывод: {'a': 1, 'b': 2, 'c': 3}

update() - Обновление словаря

my_dict = {'a': 1, 'b': 2}
my_dict.update({'c': 3, 'd': 4})
print(my_dict)  # Вывод: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

# Обновление с помощью другого словаря
other_dict = {'e': 5, 'f': 6}
my_dict.update(other_dict)

Практические примеры использования словарей

Подсчет элементов

text = "hello world"
char_count = {}
for char in text:
    char_count[char] = char_count.get(char, 0) + 1
print(char_count)  # {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}

Группировка данных

students = [
    {'name': 'John', 'grade': 'A'},
    {'name': 'Alice', 'grade': 'B'},
    {'name': 'Bob', 'grade': 'A'},
    {'name': 'Charlie', 'grade': 'C'}
]

grades = {}
for student in students:
    grade = student['grade']
    if grade not in grades:
        grades[grade] = []
    grades[grade].append(student['name'])

print(grades)  # {'A': ['John', 'Bob'], 'B': ['Alice'], 'C': ['Charlie']}

Кэширование результатов

cache = {}

def expensive_function(n):
    if n in cache:
        return cache[n]
    
    result = n ** 2  # Имитация сложных вычислений
    cache[n] = result
    return result

Особенности и ограничения словарей

Требования к ключам

Ключи словаря должны быть неизменяемыми (immutable) типами данных:

  • Строки, числа, кортежи - можно использовать
  • Списки, словари, множества - нельзя использовать
# Правильно
valid_dict = {
    'string_key': 'value',
    42: 'numeric_key',
    (1, 2): 'tuple_key'
}

# Неправильно - вызовет ошибку
# invalid_dict = {[1, 2]: 'list_key'}  # TypeError

Производительность

Словари обеспечивают быстрый доступ к элементам со средней сложностью O(1) для операций поиска, вставки и удаления.

Порядок элементов

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

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

категории

  • Введение в Python
  • Основы программирования на Python
  • Управляющие конструкции
  • Структуры данных
  • Функции и модули
  • Обработка исключений
  • Работа с файлами и потоками
  • файловая система
  • Объектно-ориентированное программирование (ООП)
  • Регулярные выражения
  • Дополнительные темы
  • Общая база питона