Найти в Дзене

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

Словарь (dict) — это изменяемая коллекция, хранящая данные в виде пар ключ-значение. Ключи должны быть хешируемыми (hashable), а значения могут быть любыми объектами. Словари не поддерживают индексы, как списки, но обеспечивают быстрый доступ к данным по ключу. my_dict = {"name": "Alice", "age": 30, "city": "London"} 1. Уникальность ключей: Каждый ключ может встречаться только один раз. 2. Изменяемость: Словарь можно изменять (добавлять, удалять элементы). 3. Динамический размер: Размер меняется по мере добавления/удаления элементов. 4. Порядок элементов: Начиная с Python 3.7, словари сохраняют порядок добавления элементов. print(my_dict["name"]) # Alice (KeyError, если ключа нет) print(my_dict.get("name", "Unknown")) # Alice (без ошибки) my_dict["age"] = 31 # Обновление my_dict["country"] = "UK" # Добавление - get(key[, default]): Возвращает значение по ключу, если ключа в словаре нет, возвращается значение по умолчанию. - keys(): Возвращает итерируемый объект с ключами. - val
Оглавление

Определение

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

my_dict = {"name": "Alice", "age": 30, "city": "London"}

Свойства

1. Уникальность ключей: Каждый ключ может встречаться только один раз.

2. Изменяемость: Словарь можно изменять (добавлять, удалять элементы).

3. Динамический размер: Размер меняется по мере добавления/удаления элементов.

4. Порядок элементов: Начиная с Python 3.7, словари сохраняют порядок добавления элементов.

Основные методы и операции

1. Доступ и изменение элементов

print(my_dict["name"]) # Alice (KeyError, если ключа нет)
print(my_dict.get("name", "Unknown")) # Alice (без ошибки)
my_dict["age"] = 31 # Обновление
my_dict["country"] = "UK" # Добавление

2. Методы

- get(key[, default]): Возвращает значение по ключу, если ключа в словаре нет, возвращается значение по умолчанию.

- keys(): Возвращает итерируемый объект с ключами.

- values(): Возвращает значения.

- items(): Возвращает пары (ключ, значение).

- pop(key): Удаляет ключ и возвращает его значение.

- popitem(): Удаляет пару (ключ, значение) из словаря и возвращает ее значение. Пары возвращаются в порядке LIFO.

- update(): Обновляет словарь из другого словаря.

- setdefault(key, default): Возвращает значение ключа или устанавливает default.

for key, value in my_dict.items():
print(f"{key}: {value}")

3. Удаление

del my_dict["city"] # Удаление элемента
my_dict.pop("age") # Удаление с возвратом значения
my_dict.clear() # Очистка словаря

Итерация и генераторы словарей

Словари можно итерировать по ключам, значениям или парам:

# Итерация по ключам
for key in my_dict:
print(key)
# Генератор словаря
squares = {x: x**2 for x in range(5)}
even_squares = {k: v for k, v in squares.items() if v % 2 == 0}

OrderedDict

Класс OrderedDict (из модуля collections) сохранял порядок элементов в версиях Python до 3.7. В современных версиях обычные словари также сохраняют порядок, но OrderedDict предлагает дополнительные методы:

- move_to_end(key): Перемещает ключ в конец.

- popitem(last=True): Удаляет последний или первый элемент.

from collections import OrderedDict
od = OrderedDict([("a", 1), ("b", 2)])
od.move_to_end("a")

defaultdict

defaultdict (из модуля collections) автоматически создает значения для отсутствующих ключей, используя фабричную функцию.

from collections import defaultdict
# Пример: группировка слов по длине
words = ["apple", "cat", "dog", "banana"]
dd = defaultdict(list)
for word in words:
dd[len(word)].append(word)
print(dd) # {5: ['apple'], 3: ['cat', 'dog'], 6: ['banana']}

Hashable в Python

Ключами словаря могут быть только хешируемые объекты:

- Хешируемые: числа, строки, кортежи (с неизменяемыми элементами).

- Нехешируемые: списки, словари, множества.

Хешируемость означает, что объект имеет метод __hash__(), который возвращает уникальное целое число, и его значение никогда не меняется.

# Проверка хешируемости
print(hash("Python")) # Работает
print(hash((1, 2))) # Работает
# hash([1, 2]) # Ошибка: список нехешируем

Заключение

Словари — один из самых мощных типов данных в Python. Они эффективны для поиска, вставки и удаления элементов. Использование defaultdict и OrderedDict расширяет их функционал, а понимание хешируемости помогает избегать ошибок при работе с ключами.