Словари в Python: Основные концепции, методы и примеры

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

 

Что может являться ключом в словаре?

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

Числа (int, float):

my_dict = {1: 'one', 2: 'two'}

Выходные данные:

{1: 'one', 2: 'two'}

 

Строки (str):

my_dict = {'name': 'Alice', 'age': 25}

Выходные данные:

{'name': 'Alice', 'age': 25}

 

Кортежи (tuple):

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

my_dict = {('a', 1): 'first', ('b', 2): 'second'}

Выходные данные:

{('a', 1): 'first', ('b', 2): 'second'}

 

Булевы значения (bool):

my_dict = {True: 'yes', False: 'no'}

Выходные данные:

{True: 'yes', False: 'no'}

Нельзя использовать изменяемые (mutable) типы данных в качестве ключей, такие как:

  • Списки (list)
  • Множества (set)
  • Словари (dict)

Попытка использовать такие типы в качестве ключей приведет к ошибке:

my_dict = {[1, 2, 3]: 'list'}

Ошибка:

TypeError: unhashable type: 'list'

 

Что может являться значением в словаре?

Значениями в словаре могут быть любые объекты Python, включая:

  • Числа: 42, 3.14
  • Строки: "Hello, World!"
  • Списки: [1, 2, 3]
  • Кортежи: (1, 2, 3)
  • Другие словари: {'nested_key': 'nested_value'}
  • Функции, объекты, классы и т.д.

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

my_dict = {
    'integer': 42,
    'string': "Hello, World!",
    'list': [1, 2, 3],
    'tuple': (1, 2, 3),
    'nested_dict': {'nested_key': 'nested_value'}
}

Выходные данные:

{'integer': 42, 'string': 'Hello, World!', 'list': [1, 2, 3], 'tuple': (1, 2, 3), 'nested_dict': {'nested_key': 'nested_value'}}

 

Форматирование словарей

Почему лучше писать словарь в столбик, а не в строку?

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

Пример словаря, записанного в строку:

my_dict = {'name': 'Alice', 'age': 25, 'location': 'Wonderland'}

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

my_dict = {
    'name': 'Alice',
    'age': 25,
    'location': 'Wonderland'
}

Преимущества форматирования в столбик:

  1. Легкость чтения: Вы быстро можете увидеть все пары ключ-значение.
  2. Простота редактирования: Добавление или удаление элементов становится легче и менее подвержено ошибкам.
  3. Комментирование: Вы можете легко комментировать отдельные строки.

 

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

Словари можно создавать несколькими способами:

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

my_dict = {}
another_dict = dict()
print(my_dict)
print(another_dict)

Выходные данные:

{}
{}


Словарь с элементами:

my_dict = {
    'name': 'Alice',
    'age': 25,
    'city': 'New York'
}
print(my_dict)

Выходные данные:

{'name': 'Alice', 'age': 25, 'city': 'New York'}


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

my_dict = dict(name='Alice', age=25, city='New York')
print(my_dict)

Выходные данные:

{'name': 'Alice', 'age': 25, 'city': 'New York'}


Словарь с кортежами:

my_dict = dict([('name', 'Alice'), ('age', 25), ('city', 'New York')])
print(my_dict)

Выходные данные:

{'name': 'Alice', 'age': 25, 'city': 'New York'}

 

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

Для доступа к значениям используется ключ. Если ключ не существует, возникает ошибка KeyError.

my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}

print(my_dict['name'])

Выходные данные:

Alice

Чтобы избежать ошибки при доступе к несуществующему ключу, можно использовать метод get, который возвращает None или значение по умолчанию, если ключ не найден.

print(my_dict.get('name'))
print(my_dict.get('country'))
print(my_dict.get('country', 'USA'))

Выходные данные:

Alice
None
USA

 

Изменение и добавление элементов

Словари позволяют изменять значения и добавлять новые пары «ключ-значение».

my_dict['age'] = 26  # Изменение значения по ключу 'age'
my_dict['country'] = 'USA'  # Добавление новой пары

print(my_dict)

Выходные данные:

{'name': 'Alice', 'age': 26, 'city': 'New York', 'country': 'USA'}

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

Для удаления элементов из словаря используются несколько методов:


Удаление с помощью del:

del my_dict['city']  # Удаляет элемент с ключом 'city'
print(my_dict)

Выходные данные:

{'name': 'Alice', 'age': 26, 'country': 'USA'}

Метод pop:

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

age = my_dict.pop('age')  # Удаляет элемент с ключом 'age' и возвращает его значение
print(age)
print(my_dict)

# Чтобы указать значение по умолчанию укажите дополнительный аргумент, например 0: .pop('age', 0)
# При .pop('age', 0) если ключа 'age' не будет, вернется 0

Выходные данные:

26
{'name': 'Alice', 'country': 'USA'}

Метод popitem:

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

item = my_dict.popitem()  # Удаляет и возвращает последнюю пару
print(item)
print(my_dict)

Выходные данные:

('country', 'USA')
{'name': 'Alice'}

Метод clear:

Полностью очищает словарь.

my_dict.clear()  # Очищает словарь
print(my_dict)

Выходные данные:

{}

 

 

Методы словарей

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

Метод keys:

Возвращает представление всех ключей словаря.

my_dict = {'name': 'Alice', 'age': 26, 'city': 'New York'}
keys = my_dict.keys()
print(keys)

Выходные данные:

dict_keys(['name', 'age', 'city'])

Метод values:

Возвращает представление всех значений словаря.

values = my_dict.values()
print(values)

Выходные данные:

dict_values(['Alice', 26, 'New York'])

Метод items:

Возвращает представление всех пар «ключ-значение» словаря.

items = my_dict.items()
print(items)

Выходные данные:

dict_items([('name', 'Alice'), ('age', 26), ('city', 'New York')])

Метод update:

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

my_dict.update({'country': 'USA', 'age': 27})
print(my_dict)

Выходные данные:

{'name': 'Alice', 'age': 27, 'city': 'New York', 'country': 'USA'}

Таблица по лекции:

КонцепцияОписаниеПример кодаВывод
Создание словаряСловари создаются с использованием фигурных скобок {} и содержат пары ключ-значение.my_dict = {'apple': 3, 'banana': 5}{'apple': 3, 'banana': 5}
Доступ к значениюЗначение извлекается по ключу.my_dict['apple']3
Добавление элементаНовый элемент добавляется через присвоение.my_dict['orange'] = 2{'apple': 3, 'banana': 5, 'orange': 2}
Удаление элементаУдаление элемента по ключу с помощью del или метода pop().del my_dict['banana'] 
my_dict.pop('apple')
{'orange': 2}
Проверка наличия ключаИспользуется оператор in для проверки наличия ключа.'apple' in my_dictFalse
Получение всех ключейМетод keys() возвращает все ключи словаря.my_dict.keys()dict_keys(['orange'])
Получение всех значенийМетод values() возвращает все значения словаря.my_dict.values()dict_values([2])
Получение всех пар ключ-значениеМетод items() возвращает пары ключ-значение в виде кортежей.my_dict.items()dict_items([('orange', 2)])
Объединение словарейМетод update() объединяет один словарь с другим.my_dict.update({'grape': 7}){'orange': 2, 'grape': 7}
Получение значения с дефолтным значениемМетод get() возвращает значение по ключу, или дефолтное значение, если ключа нет.my_dict.get('apple', 'Not found')'Not found'
Очистка словаряМетод clear() удаляет все элементы словаря.my_dict.clear(){}
Копирование словаряМетод copy() создаёт копию словаря.new_dict = my_dict.copy()new_dict будет копией my_dict
Итерация по словарюМожно перебирать ключи, значения или пары ключ-значение.for key, value in my_dict.items(): print(key, value)Выводит все ключи и их значения

Эта таблица отображает основные концепции и методы работы со словарями в Python, иллюстрируя их простыми примерами.

 

Теперь у вас есть подробное понимание работы со словарями в Python. В следующей лекции мы разберём то, как перебирать элементы словаря и то как создавать и заполнять словари, используя генераторы.

Перейти к следующему шагу

Комментарии