Python: исполнение по модулю на струнах

У меня есть несколько миллиардов строк в формате word0.word1.word2, и я хочу выполнить по модулю n этих строк, чтобы я мог передать каждую запись в базу данных для хранения. Я знаю, что могу выполнить форму по модулю 10 для первого символа строк следующим образом:

for i in ["a.b","c.d"]: 
    print ord(i[0]) % 10

Это не разделит мои строки равномерно, хотя word0, word1 и word2 отсортированы в алфавитном порядке, и первый символ строки очень часто "a". Я мог бы взять последнюю букву строки, но не уверен, нормально ли они распространяются или нет.

Мой вопрос: есть ли быстрый способ выполнить что-то вроде "ord" на всей строке? В конечном итоге я планирую запустить модуль 48 по целочисленным представлениям строк и хочу, чтобы этот модульный вывод был равномерно распределен по всем 48 ядрам. Я был бы благодарен за любую помощь, которую могут предложить другие.

1 ответ

Решение
s = "whatever"  # have a string
h = hash(s)     # obtain its hash
bin = h % 48    # find the bin

Обновление: встроенный в Python hash Функция обеспечивает детерминированные значения только для одного процесса. Если вы хотите сохранить эту информацию (прямо или косвенно) в базе данных, вы должны использовать явную хэш-функцию, которая не содержит случайных данных. (Кредит идет на @Alik)

Другие вопросы по тегам