【问题标题】:Inverting large JSON dictionary反转大型 JSON 字典
【发布时间】:2017-02-22 07:03:07
【问题描述】:

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

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

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

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

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

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

我的幼稚方法涉及将每个名称添加到二维数组中(在找到时将字符串和计数添加到该数组中)。

最初它运行得很快,但随着数组大小的增加,运行时间会减少(线性搜索)。

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])

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

谢谢。

【问题讨论】:

  • 这是将您的 JSON 数据放入关系数据库的完美情况。
  • JSON 只是一种序列化格式,一种将数据描述为文本的方式。确实没有任何“JSON 功能”来更改数据。
  • 这是 Python 2 还是 3?
  • @Tomalak 谢谢,会考虑把它变成一个数据库。
  • @RemcoGerlich python 3。我认为它可能没有一些功能,因为我确实看过自己,我希望可能有一些更pythonic的方式来做我尝试过的事情会更有效.

标签: python arrays json dictionary


【解决方案1】:

类似

from collections import defaultdict
result = defaultdict(dict)

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

会这样做,但有 800 万个项目可能是时候查看数据库了。

【讨论】:

  • 谢谢-我可能会研究数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 2019-09-25
  • 2019-11-15
相关资源
最近更新 更多