JSON数据
[
{
"name": "24-tiankong",
"value": "填空回答内容1"
},
{
"name": "19-tiankong",
"value": "填空回答内容2"
},
{
"name": "7-duoxuan",
"value": "A"
},
{
"name": "7-duoxuan",
"value": "B"
},
{
"name": "7-duoxuan",
"value": "C"
}
]
期望目标
上面的json数据是从一个前端form使用jQuery的serializeArray()后生成的,现在想要对其键值根据name
进行分组,这样好处理多个相同名称*-duoxuan
(其实是前端CheckBox多选的结果)
处理过程
import json
import itertools
from operator import itemgetter
raw = r'[{"name": "24-tiankong","value": "填空回答内容1"},{"name": "19-tiankong","value": "填空回答内容2"},{"name": "7-duoxuan","value": "A"},{"name": "7-duoxuan","value": "B"},{"name": "7-duoxuan","value": "C"}]'
jdata = json.loads(raw)
sorted_jdata = sorted(jdata, key=itemgetter('name')) # 先进行排序
for key, group in itertools.groupby(sorted_jdata, key=lambda x:x['name']): # 使用匿名函数将name传给key
print(key)
print(list(group))
# 输出内容
19-tiankong
[{'name': '19-tiankong', 'value': '填空回答内容2'}]
24-tiankong
[{'name': '24-tiankong', 'value': '填空回答内容1'}]
7-duoxuan
[{'name': '7-duoxuan', 'value': 'A'}, {'name': '7-duoxuan', 'value': 'B'}, {'name': '7-duoxuan', 'value': 'C'}]