反转大型JSON字典

时间:2016-10-13 08:42:23

标签: python arrays json dictionary

我有一个JSON字典,其中包含以下格式的多个条目(大约800万条):

{"Some_String": {"Name0": 1, "Name1": 1, "Name42": 2, "Name5": 2, ... }, ...}

它包含用于引用离散命名实体的字符串,以及该字符串引用该名称的次数。

我想反转映射,以便Name0后跟引用它的字符串(保持计数)。名称可能出现在多个字符串条目中。

{"Name0": {"Some_String": 1, "Some_other_string": 1,... }, ...}

我的问题是:是否有一些JSON功能可以让我有效地做到这一点?

我的天真方法涉及将每个名称添加到2D数组中(在找到它们时将字符串和计数添加到该数组)。

最初这种情况运行得非常快,但随着阵列大小的增加,运行时间减少(线性搜索)。

for string in list(surface.keys()):

    for count, name in zip(surfacs[string].values(),surface[string].keys()):

        if name in pages:
            surface_count_list[pages.index(name)].append([string, count])


        else:
            pages.append(name)
            surface_count_list.append([string, count])

我意识到我可以将这些数据直接添加到新词典中,但我不知道这是否真的会随着词典大小的增加而增加添加新项目的效率。

感谢。

1 个答案:

答案 0 :(得分:0)

这样的东西
from collections import defaultdict
result = defaultdict(dict)

for somestring, namesdict in initialdata.items():
    for name, amount in namesdict.items():
        result[name][something] = amount

会这么做,但有800万件物品可能是时候看数据库了。