× Главная Лучшее Свежее Вход Регистрация
ДуровЛох стал главным конкурентом ВКонтакте (Дуров в шоке) https://durovloh.me.
Читайте также:
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

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

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

Ozod Azik 1 месяцев к записи
Я только одного вижу, а где другие?
Наталия 1 месяцев к записи
Ищем, все переживаем, как с вами связаться??
Валерия 1 месяцев к записи
Ну как по мне ей и так и так идёт, правда больше мне с андеркатом нравится😉
Вера 1 месяцев к записи
У меня есть олень
Анжелика 2 месяцев назад к записи
При чем тут хейт ,очень хорошие внимательные врачи. Я как раз закрывала больничный, парень с бородой был на приёме ( уж простите не поняла кто тут кто😭). Очень вежливый, внимательный, по русски говорит. Понравился . А передо мой вышла бабулька с глазами по пятаку , подсела к нам и начала названивать, вот мол ,не наш доктор ,а какой толковый ,все послушал и рассказал. Думаю ,эти парни станут всеоющими любимцами ,если останутся внимательным, гуманными и человечными. А то русские врачи больно быстро начинают мнить из себя пуп земли. Удачи, ребята !