Python 3遍历JSON数组:按Key聚合Value并生成指定格式输出
问题与解决方案
初始需求
有如下JSON数组:
"json_array": [ { "key": "k1", "value": "v1" }, { "key": "k2", "value": "v2" } ]
需要将其中的value以v1,v2的形式列出。
修改后的结构与当前问题
后续修改了JSON数组结构并编写了如下代码:
json_array = [ [ { "key": "k1", "value": "v1" }, { "key": "k1", "value": "v2" } ], [ { "key": "k1", "value": "v3" }, { "key": "k2", "value": "v4" } ], [ { "key": "k2", "value": "v5" }, { "key": "k3", "value": "v6" } ] ] itemcount = 0 for item in json_array: print(item) values = [] for kv in item: if 'value' in kv: values.append(kv['value']) print(', '.join([kv['key']] + values))
当前代码输出:
[{'key': 'k1', 'value': 'v1'}, {'key': 'k1', 'value': 'v2'}] k1, v1, v2 [{'key': 'k1', 'value': 'v3'}, {'key': 'k2', 'value': 'v4'}] k2, v3, v4 [{'key': 'k2', 'value': 'v5'}, {'key': 'k3', 'value': 'v6'}] k3, v5, v6
期望输出:
k1, v1, v2, v3 k2, v4, v5 k3, v6
实现逻辑与代码
核心思路是按key分组收集所有对应的value,步骤如下:
- 初始化一个空字典,用于存储每个key对应的value列表。
- 逐层遍历嵌套的JSON数组,取出每个键值对中的
key和value。 - 将每个
value追加到对应key的列表中。 - 遍历字典,按
key+ 逗号分隔的value列表格式输出。
对应Python代码:
json_array = [ [ {"key": "k1", "value": "v1"}, {"key": "k1", "value": "v2"} ], [ {"key": "k1", "value": "v3"}, {"key": "k2", "value": "v4"} ], [ {"key": "k2", "value": "v5"}, {"key": "k3", "value": "v6"} ] ] # 初始化字典用于分组存储key对应的values key_values = {} # 逐层遍历嵌套数组 for sub_array in json_array: for kv_pair in sub_array: key = kv_pair['key'] value = kv_pair['value'] # 如果key不在字典中,先创建空列表 if key not in key_values: key_values[key] = [] key_values[key].append(value) # 按需求格式输出 for key, values in key_values.items(): # 拼接key和所有values,用逗号分隔 print(f"{key}, {', '.join(values)}")
运行后即可得到期望的输出:
k1, v1, v2, v3 k2, v4, v5 k3, v6
另外,针对最初的简单JSON数组(非嵌套),要得到v1,v2格式,代码可以简化为:
import json # 假设原始JSON字符串 json_str = ''' { "json_array": [ {"key": "k1", "value": "v1"}, {"key": "k2", "value": "v2"} ] } ''' data = json.loads(json_str) values = [item['value'] for item in data['json_array']] print(', '.join(values))
输出结果:v1, v2
内容的提问来源于stack exchange,提问作者deadshotpro
相关产品推荐
相关产品推荐

