尝试通过基于键(父级和account_name)分组来构建层次结构列表
lst = [
{
"parent": "abc",
"account_name": "abc1",
"account_number": "119445",
},
{
"parent": "abc",
"account_name": "abc2",
"account_number": "119446",
},
{
"parent": "abc",
"account_name": "abc2",
"account_number": "119447",
}
]
需要O / P
{
'abc': [
{
'abc1': ['119445'],
'abc2': ['119446', '119447']
}
]
}
尝试过setdefault
,但没有获得我想要的期望输出。
parent = {}
account_name = {}
account_number = {}
for i in lst:
j = i['account_number']
account_name.setdefault(i['account_name'], []).append(j)
parent.setdefault(i['parent'],[]).append(account_name)
print(parent)
{
'abc': [
{
'abc1': ['119445'],
'abc2': ['119446', '119447']
},
{
'abc1': ['119445'],
'abc2': ['119446', '119447']
},
{
'abc1': ['119445'],
'abc2': ['119446', '119447']
}
]
}
答案 0 :(得分:0)
parent = {}
# group by parent key
for p, data in it.groupby(lst, key=lambda d: d['parent']):
# for each group, create a new inner dict
inner_dict = {}
# setdefault and append the account numbers to the list
for d in data:
inner_dict.setdefault(d['account_name'], []).append(d['account_number'])
# setdefault and append the inner dict to the list
parent.setdefault(p, []).append(inner_dict)
结果:
{
'abc': [
{
'abc1': ['119445'],
'abc2': ['119446', '119447']
}
]
}
我不太确定内部list
是否需要包裹内部dict
,但我相信您比我更了解您的需求。