Какие типы данных могут быть ключами в словарях Python?

Ответ

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

Допустимые хешируемые типы данных:

  • Числа: int, float, complex
  • Строки: str
  • Кортежи: tuple, но только если все их элементы также хешируемы.
  • Замороженные множества: frozenset
  • Булевы значения: bool
  • NoneType: None

Недопустимые (нехешируемые) типы данных:

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

Пример:

# Допустимые ключи
valid_dict = {
    42: "Ответ на всё",
    "key": "value",
    (1, 2): "tuple as key",
    frozenset({1, 2}): "frozenset as key",
    None: "None as key"
}
print(valid_dict)

# Ошибка: TypeError: unhashable type: 'list'
try:
    invalid_dict = { [1, 2]: "list as key" }
except TypeError as e:
    print(f"Ошибка: {e}")

Важно помнить, что ключи в словаре должны быть уникальными. При попытке добавить ключ, который уже существует, его значение будет перезаписано.