示例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实用程序可以像上述情况那样获取值?
答案 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/)。您可以指定所需的输出架构,并根据其合并输入。