【发布时间】:2017-06-14 05:44:50
【问题描述】:
我在这样的列表中有一个层次结构。 真正的层次结构更复杂,嵌套的深度可能是无限的,而不仅仅是楼层中的房间。
locations = [
{
"loc": "root",
"id": "floor_1",
"name": "floor_1 name"
},
{
"loc": "root",
"id": "floor_2",
"name": "floor_2 name"
},
{
"loc": "floor_1",
"id": "room_1-1",
"name": "room_1-1 name"
},
{
"loc": "floor_1",
"id": "room_1-2",
"name": "room_1-2 name"
},
{
"loc": "floor_2",
"id": "room_2-1",
"name": "room_2-1 name"
}
我需要将它转换成这样的嵌套字典:
{
'floor_1': {
'name': 'floor_1 name',
'room_1-1': {
'name': 'room_1-1 name',
},
'room_1-2': {
'name': 'room_1-2 name',
}
},
'floor_2': {
'name': 'floor_2 name',
'room_2-1': {
'name': 'room_2-1 name',
}
}
}
我不知道如何将“名称”叶子和子树放入同一个字典中。我得到的最接近的是:
def build(loc):
children = filter(lambda l: l['loc'] == loc, locations)
return {
child['id']: {
'name': child['name'],
'xxx': build(child['id'])
}
for child in children
}
build('root')
这显然会产生错误的输出:
{'floor_1': {'name': 'floor_1 name',
'xxx': {'room_1-1': {'name': 'room_1-1 name', 'xxx': {}},
...
我想我必须将理解改为这样:
{ child['id']: build2(child['id']) for child in children }
但是我错过了叶节点('name')
【问题讨论】:
标签: python dictionary recursion