Что может быть ключом в словаре?

Серия Не Ван Россум

Для начала простыми словами о том, что такое хэш. Это математическая функция, приводящая различные массивы данных в строку фиксированной длины. Одинаковые массивы данных (например, одна и та же строка в разных переменных) будут иметь одинаковый хэш.

А далее просто: любой хэшируемый тип, а значит, immutable - имеет метод hash, который на самом и является ключом словаря. Словарь - это хэш-таблица, то есть "это структура данных, реализующая интерфейс ассоциативного массива, а именно, она позволяет хранить пары (ключ, значение) и выполнять три операции: операцию добавления новой пары, операцию удаления и операцию поиска пары по ключу."

Википедия говорит нам "Важное свойство хеш-таблиц состоит в том, что, при некоторых разумных допущениях, все три операции (добавление, удаление, поиск элемента) в среднем выполняются за время O(1).

То есть, максимально быстро.

Как обычно, мимоходом я затронул другую тему - оценку сложности алгоритмов, которая часто упоминается как Big O Notation. Не буду углубляться, просто скажу, что O(1) означает минимальные затраты времени и количества операций, сложность поиска слабо возрастает с ростом количества элементов структуры данных (нашего словаря.)

Для англоязычных есть отличная страница, где всё показано в одной наглядной картинке: https://www.bigocheatsheet.com/

Что может быть ключом в словаре?



Это кросспост из моего Telegram-канала "Не Ван Россум", где я прямо сейчас пишу сериал "101 вопрос про Python" с описанием подводных камней, неочевидностей и загвоздок.

0
Debug mode
Автор поста оценил этот комментарий

Вот только вы начали разговор со словарей которые используют не hashlib (коий содержит криптографические hash-функции и действительно выдает bytes), а стандартную функцию hash, которая возвращает число и это важно для работы словаря ибо это самое число (или точнее его остаток) используется как смещение в массиве для обеспечения работы словаря за то самое O(1).

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

И вы тоже правы. В случае словаря хэш - целое число, но подозреваю, что в большинстве случаев реального использования программистом это будет всё-таки hashlib и строка/байты. Но это не точно, или точно =)

0
Debug mode
Автор поста оценил этот комментарий
идем в док питона и быстро выясняем что хэш - таки число а не строка

Так что предлагаю вам прекратить постить хуйню и пойти учиться
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ну так сходите и выясните.

There is one constructor method named for each type of hash. All return a hash object with the same simple interface. For example: use sha256() to create a SHA-256 hash object. You can now feed this object with bytes-like objects (normally bytes) using the update() method. At any point you can ask it for the digest of the concatenation of the data fed to it so far using the digest() or hexdigest() methods.
>>> import hashlib
>>> sha3_512 = hashlib.sha3_512('12345'.encode('utf-8'))
>>> sha3_512.hexdigest()
'0a2a1719bf3ce682afdbedf3b23857818d526efbe7fcb372b31347c26239a0f916c398b7ad8dd0ee76e8e388604d0b0f925d5e913ad2d3165b9b35b3844cd5e6'
>>> type(sha3_512.hexdigest())
<class 'str'>
>>> type(sha3_512.digest())
<class 'bytes'>

Как видите, digest это либо строка, либо последовательность байт (раз слово строка вам не нравится).
показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества