Самые дешевые цены на тату! Качественные материалы...
Самые дешевые цены на тату!
Качественные материалы для вашей кожи)
Берусь за самые сложные работы.
Занимаюсь подбором эскизов.
Создаю эскизы по вашему по желанию.
Работы выполняются на высоком уровне. Татуировки Свердловск-Луганск 0721232587 -Виктор
Татуировки Свердловск-Луганск
? Нестандартная ситуация со словарями Мы знаем, что...
? Нестандартная ситуация со словарями
Мы знаем, что вы - любите 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