Читайте также:
7

? Нестандартная ситуация со словарями Мы знаем, что...

? Нестандартная ситуация со словарями

Мы знаем, что вы - любите Python, а еще больше любите необычные фишки. Но знали ли вы, что при работе со словарями могут возникать довольно не интуитивные ситуации?

❓ Посмотрите, чему будет равен my_dict?

» my_dict = {
1.0: 'One (float)',
1: 'One (int)',
True: 'One (bool)',
'1': 'One (string)'
}

# {1.0: 'One (bool)', '1': 'One (string)'}

Несмотря на добавление 4 отдельных ключей в словарь, можете ли вы объяснить, почему он оставляет только два из них?

✅ Мы знаем, что ключи должны быть уникальными и неизменяемыми. В данном случае нет никаких сомнений в том, что 1.0, 1 и True имеют разные типы данных.

» type(1.0), type(1), type(True)

# (float, int, bool)

Если посмотреть на их id, убедимся что и они различны:

» id(1.0), id(1), id(True)

# (139644507527152, 139645051222320, 9758592)

❌ Но дело не только в этом! Ключи должны быть еще хешируемы. Для поиска ключа, Python использует именно его хэш-значение, а не id. Значит посмотрим на их хэш-значения:

» hash(1.0), hash(1), hash(True)

# (1, 1, 1)

Вот и получается, поскольку они имеют одно и то же хэш-значение, словарь рассматривает их как одни и те же ключи.

? Но обратите еще внимание на итоговые ключ и значение: ключ - 1.0, в то время как значение соответствует ключу True.

❓Как так получилось?

Дело в том, что сначала 1.0 добавляется в качестве ключа, а значение устанавливается 'One (float)'. Затем, добавляя ключ 1, python распознает его как эквивалентное хэш-значение. И значение, соответствующее 1.0, перезаписывается на 'One (int)', в то время как ключ (1.0) сохраняется как есть.

Наконец, при добавлении True снова получаем эквивалентность хэша с существующим ключом 1.0. И снова, значение, которое изначально было 'One (float)' и обновлено до 'One (int)' на предыдущем шаге, перезаписывается на 'One (bool)'.

❓А почему сохранен строковый ключ '1'?

Тут все просто: он имеет уникальное хеш-значение, отличное от других ключей.

? Надеемся, что этот пост дал вам чуть более полное понимание работы словарей. Приходите к IT Resume на Симулятор "Аналитик данных", где мы с нуля обучаем SQL и Python и делимся полезными фишками!

#python@pylounge

? Нестандартная ситуация со словарями Мы знаем, что...
? Нестандартная ситуация со словарями Мы знаем, что... ? Нестандартная ситуация со словарями Мы знаем, что... ? Нестандартная ситуация со словарями Мы знаем, что... ? Нестандартная ситуация со словарями Мы знаем, что...
Еще посты

Популярные теги:

Свежие комментарии:

Gggg 15 часов назад к записи
Gggg
Андрей 2 недель назад к записи
И где?
Александр 3 недель назад к записи
Немного по другому копыта расположены, но очень органично, состоит из двух частей,
Александр 3 недель назад к записи
Есть такая лошадка, материал алюминиевый,
Хый 3 недель назад к записи
Фу кликбейт ебучий