Python - 从字典列表创建动态嵌套字典
问题描述:
下面是示例列表数据,我想将其转换为动态字典。Python - 从字典列表创建动态嵌套字典
result = [
{
"standard": "119",
"score": "0",
"type": "assignment",
"student": "4"
},
{
"standard": "119",
"score": "0",
"type": "assignment",
"student": "5"
},
{
"standard": "118",
"score": "0",
"type": "assessment",
"student": "4"
}
]
我想创建一个功能conv_to_nested_dict(*指定参数时,数据),其中convertes键的所有列表动态dictonary。
例如:conv_to_nested_dict([ '标准', '学生'],结果)应该给运算:
{
"118": {
"4": [{
"score": "0",
"type": "assessment"
}]
},
"119": {
"4": [{
"score": "0",
"type": "assignment"
}],
"5": [{
"score": "0",
"type": "assignment"
}]
}
}
conv_to_nested_dict([ '标准', '类型'],结果)
{
"118": {
"assessment": [{
"score": 0,
"student": "4"
}]
},
"119": {
"assignment": [{
"score": 0,
"student": "4"
},{
"score": 0,
"student": "5"
}]
}
}
答
这是一个大概的想法。
def conf_to_nested_dict(keys, result):
R = {}
for record in result:
node = R
for key in keys[:-1]:
kv = record[key]
next_node = node.get(kv, {})
node[kv] = next_node
node = next_node
last_node = node.get(record[keys[-1]], [])
last_node.append(record)
node[record[keys[-1]]] = last_node
return R
#R is your structure
result
是你的源阵列,keys
是由要分组结果的关键。迭代每个记录的结果 - 根据键值(记录[键])创建树结构。对于最后一个键 - 创建一个列表并将记录追加到它。
+0
非常感谢,这工作得很好。你救了我的一天,谢谢。 :) – Akash
这是你的作业吗? – wroniasty
@wroniasty我在思考逻辑时被卡住了,我尝试了一些方法,比如在Python和过滤器中使用group。我想使它具有通用性和动态性,因此请求帮助。我面临的主要问题是键在输出字典中是动态的。 – Akash
期望的输出结构似乎存在错误。你有一个没有关闭的列表。请清理并澄清问题 –