Ответ
Ключи в словаре Python должны быть хешируемыми и неизменяемыми (immutable). Это значит, что ключ должен иметь метод __hash__(), который возвращает одно и то же значение на протяжении всего времени жизни объекта, и он не должен изменяться.
Допустимые типы ключей:
- Числа (
int,float) - Строки (
str) - Кортежи (
tuple), если они содержат только неизменяемые элементы frozenset
Недопустимые типы ключей:
- Списки (
list) - Множества (
set) - Словари (
dict) - Другие изменяемые объекты
Пример:
valid_dict = {
1: 'number',
'key': 'string',
(1, 2): 'tuple'
}
invalid_dict = {
[1, 2]: 'list' # TypeError: unhashable type: 'list'
} Ответ 18+ 🔞
А, слушай, про ключи в питоновских словарях — это вообще отдельная песня, пиздец! Ну то есть, не любая хуйня туда влезет, есть жёсткие правила, блядь.
Короче, ключ должен быть хешируемым и неизменяемым, ёпта. Это как? Ну, у объекта должен быть метод __hash__(), который выдаёт одно и то же число, пока объект живёт, и сам объект меняться не должен. Иначе какой смысл, а? Нашёл ты ключ, а он, сука, форму поменял — и как его теперь искать, блядь? Полный пиздец.
Что можно пихать в ключи, не задумываясь:
- Циферки всякие (
int,float) — они стабильные, блядь. - Строки (
str) — тоже святые. - Кортежи (
tuple), но только если внутри у них сидят такие же святые, неизменяемые ублюдки. Если в кортеж сунешь список — всё, пиши пропало. - Ну и
frozenset, замороженное множество — его тоже не согнёшь.
А что НИ В КОЕМ СЛУЧАЕ нельзя, иначе получишь по ебалу с TypeError:
- Списки (
list) — о, эти шалавки вечно меняются! - Множества (
set) — такие же шлюхи. - Словари (
dict) — да они вообще, блядь, эталон непостоянства! - Любые другие объекты, которые могут измениться после создания.
Смотри, вот наглядный пиздец:
# Всё чётко, работает
valid_dict = {
1: 'number',
'key': 'string',
(1, 2): 'tuple' # Кортеж из чисел — красота!
}
# А вот это — НЕТ, БЛЯДЬ! Сейчас влетит!
invalid_dict = {
[1, 2]: 'list' # TypeError: unhashable type: 'list'
# Питон тебе сразу: "Ты чё, мудак, список как ключ? Иди нахуй!"
}
Вот и вся философия, блядь. Не хочешь проблем — используй только твёрдое, неизменное барахло для ключей. А то будет тебе чих-пых в сраку с ошибками!