Максимальный размер словаря в Python?
Я использую словарь python для хранения большого количества объектов и имею строковое имя для каждого из них. Чтобы быть конкретным, вот мой код:
from itertools import product
for (i,j,k) in product(range(N),range(M),range(K)):
var_name='x_'+'_'+str(i)+str(j)+'_'+str(k)
var_dict[var_name] = f(var_name,other_params)
print len(var_dict)
f(...) возвращает объект. В моем коде N=363, M=500 и K=2. Поэтому я ожидаю 363000 записей в словаре. Но когда я проверяю длину var_dict, это 330860!!!
(Pdb) len (var_dict) 330860
вот мои вопросы: 1)Есть ли объяснение этому? Е. Г. есть ли предел количество элементов, которые может адресовать встроенная хэш-таблица python?
2) что я могу сделать, чтобы решить эту проблему?
спасибо!
3 ответов
проблема:
str(i)+str(j)
это не создает уникальных идентификаторов. Например, значение, установленное при i=1
и j=11
будет перезаписано значением, установленным при i=11
и j=1
(есть еще много примеров, а также).
вы можете исправить проблему, вставив некоторый символ разделителя между двумя числами (например, подчеркивание, как у вас есть между j
и k
).
у вас нет разделителя между i
и j
в построенных строк, поэтому туплю как (12, 1, 0)
и (1, 21, 0)
произвести такое же имя. Если возможно, не делайте имен для этих вещей вообще; просто используйте цифры напрямую:
var_dict[i, j, k] = f(i, j, k, other_params)
если f
действительно нужно взять строку, изменить конструкцию имени, чтобы поставить разделитель между i
и j
:
var_name = 'x_{}_{}_{}'.format(i, j, k)
и, если возможно, используйте Кортеж в качестве ключа dict, даже если f
нужен строка:
var_dict[i, j, k] = f(var_name, other_params)