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

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

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

Мы знаем, что вы - любите 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

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

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

ssfmzr 4 дней назад к записи
ну и что это за хуйня, как читать нахуй
Петенька 1 месяцев к записи
Я не пойму зачем вообще платить. Это как платить, за поедание шашлыка или колбасы :) Люди живут спокойно спят на таких кроватях, зачем за это платить. Ну ладно жиром бесятся французы ваши. У меня такая водяная кровать Ruby дома стоит, и мне не надо платить, чтобы я получал пользу и удовольствие от использования. На счет невесомости, да согласен, эффект небольшой конечно есть, ну это не как полет по стратосфере конечно далеко нет такой эффект. Вот тут я покупал свою водяную кровать https://ruby-bed.ru
рин 2 месяцев назад к записи
любовь как в дораме
Евгений 2 месяцев назад к записи
Я ВАС ВСЕХ НА ХУЮ ВЕРТЕЛ, Я ПРОСТО ХОЧУ БЫТЬ СЧАСТЛИВЫМ И ПРОЧИТАТЬ ЭТУ МАНГУ
Евгений 2 месяцев назад к записи
Я В ТАКОМ НЕГОДОВАНИИ , Я ИЩУ САЙТ ГДЕ МОЖНО ПРОСИТАТЬ ЭТУ ПОЕБОТУ УЖЕ ЧАС , И ТУТ БОЯДЬ О ДА СВЕРШИЛОСЬ Я НЕШЕЛ САЙТ, Я ЕБАЛСЯ С ТЕМ ЧТОБЫ ЗАРЕГАТЬСЯ ПОЛ ЧАСА ИБО МОЙ ТЕЛЕФОН УЖЕ ЕБАНУЛСЯ В КРАЙ , С НОРЕМ ПОПОЛАМ Я ЗАРЕГАЛСЯ. А ТУТ ЕБИСЬ ОНО КОНЕМ ЧИТАТЬ НЕЛЬЗЯ