Назад к вопросам
Junior
69
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Ключом в словаре Python может быть любой хешируемый объект.

Хешируемость объекта означает, что у него есть хеш-значение, которое не меняется в течение его жизненного цикла, и что он может быть сравнен с другими объектами на равенство.

Примеры хешируемых типов данных:

  • Числа (int, float, complex)
  • Строки (str)
  • Кортежи (tuple), при условии, что все элементы кортежа также хешируемые
  • Логические значения (bool)
  • None

Примеры нехешируемых типов данных:

  • Списки (list)
  • Словари (dict)
  • Множества (set)
# Допустимые ключи
valid_dict = {
    1: "integer key",
    "hello": "string key",
    (1, 2): "tuple key", # Кортеж хешируем, т.к. его элементы (int) хешируемые
    True: "boolean key",
    None: "None key"
}

# Недопустимые ключи
# invalid_dict = {
#     [1, 2]: "list key" # Список не хешируемый
# }

# invalid_dict = {
#     {"a": 1}: "dict key" # Словарь не хешируемый
# }

# invalid_dict = {
#     {1, 2}: "set key" # Множество не хешируемое
# }

# Пример кортежа, который нельзя использовать как ключ из-за нехешируемого элемента
# invalid_tuple_key_dict = {
#     (1, [2, 3]): "invalid tuple" # Список внутри кортежа делает его не хешируемым
# }

Если объект является пользовательским классом, он может стать хешируемым, если определить методы __hash__ и __eq__. По умолчанию большинство пользовательских классов хешируемы, кроме тех, у которых явно определен метод __eq__, но не __hash__, или наследующих от класса с неизменяемым хешем, но имеющих изменяемые атрибуты.