Загрузить один большой словарь Python, закодированный как Json, не убивая использование памяти?

Я видел много похожих вопросов на этот, но ничего действительно совпадающего. Большинство других вопросов, казалось, относились к скорости. То, что я испытываю, - это один словарь json, который находится в файле размером 1,1 гига в моем локальном ящике, занимающем все мои 16 гигабайт памяти, когда я пытаюсь загрузить его, используя что-то вроде :

f = open(some_file, "rb")
new_dictionary = json.load(f)

. Это происходит независимо от того, что json, который я использую (Я пробовал ujson, json, yajl )и независимо от того, читаю ли я что-то в виде потока байтов или нет. Это не имеет для меня абсолютно никакого смысла. Что с сумасшедшим использованием памяти и как мне обойти это?

Если это поможет, словарь — это просто набор вложенных словарей, в каждом из которых целые числа указывают на другие целые числа. Пример выглядит так::

{"0":{"3":82,"4":503,"15":456},"956":{"56":823,"678":50673,"35":1232}...}

UPDATE :. Когда я запускаю это с помощью simplejson, на самом деле он занимает всего 8 гигабайт. Понятия не имею, почему этот занимает гораздо меньше, чем все остальные.

ОБНОВЛЕНИЕ 2:Итак, я провел дополнительное расследование. Я загрузил свой словарь с помощью simplejson,и попытался преобразовать все ключи в целые числа (в соответствии с предположением Лиори о том, что строки могут занимать больше места ). Пространство осталось прежним — 8 гигов. Затем я попробовал запустить gc.collect ()по предложению Уинстона Эверта. Места по-прежнему оставалось на уровне 8 гигов. Наконец, раздраженный и любопытный, я выбрал свою новую структуру данных, вышел из Python и перезагрузился. О чудо, он по-прежнему занимает 8 гигов. Я думаю, Python просто хочет столько места для большого 2D-словаря. Разочаровывает, конечно, но, по крайней мере, теперь я знаю, что это не проблема JSON, пока я использую simplejson для его загрузки.

7
задан Eli 8 May 2012 в 17:33
поделиться