结合JSON中的列表元素列表

时间:2019-07-01 12:33:14

标签: python

示例JSON:

{
  "data": [
    {
      "ids": [1, 2, 3],
      "category": ["a", "b"]
    },
    {
      "ids": [3, 4, 5, 6],
      "category": ["a","c","d"]
    }
  ]
}

我需要组合ID并创建一个唯一的ID列表。

解决方案1:

data = json.loads(str)["data"]

unique_id_set = set()

for d in data:
    for id in d["ids"]:
        unique_id_set.add(id)

unique_ids = list(unique_id_set)

解决方案2:

ids = []
for d in data:
    ids.extend(d["ids"])

unique_ids = list(set(ids))

解决方案2降低了时间复杂度,但设置转换的成本高昂吗?

是否有任何直接有效的JSON实用程序可以像上述情况那样获取值?

2 个答案:

答案 0 :(得分:3)

您的两种方法都是O(整个数据结构中ID的总数),因此您可以随意使用在美学上更令人愉悦的一种。

  

解决方案2降低了时间复杂度...

我不同意。解决方案2可能没有一个显式的for循环,但这并没有使它更有效,因为与list.extend的O(1)相比,set.add是O(N)。

  

...但是列表设置转换的成本高吗?

它是O(N),因此不会使您的解决方案的时间复杂性恶化。

  

是否有任何直接有效的JSON实用程序可以像上述情况那样获取值?

不在stdlibs中。 Python中包含的唯一json实用工具是json,并且该模块中的任何方法都与数据加载后的数据结构无关。一旦数据离开文件并进入对象,Python便不再将其视为“ JSON”,而只是dicts / lists / strings / numbers的集合。

...而且,如果您在考虑“在那种情况下,是否有任何直接有效的dict / list / string / number实用程序来获取此类值?”,我不知道。只需三到四行就可以编写自己的逻辑,因此对这种实用程序的需求不大。

答案 1 :(得分:0)

查看jsonmerge(https://pypi.org/project/jsonmerge/)。您可以指定所需的输出架构,并根据其合并输入。