我有一个用例,其中我必须创建多个子词典以将嵌套词典拆分为 5 个级别
让我们假设我的字典如下所示。
[{ person: [{
"id" : "abc",
"name" : "xyz",
"address" : {"co-ord" : "123", "place" : "world"},
"previous companies" :[{"comp1" : "name1"}, {"comp2":"name2"}]
}]
}]
现在我需要创建一个列表,例如
[
person:
{
"id" : "abc",
"name" : "xyz",
}
person_address:{
"id" : "abc",
"co-ord" : "123",
"place" : "world"
}
person_companies:
{
"id" : "abc",
[{"comp1" : "name1"},
{"comp2":"name2"}]
}
]
每个子目录都需要一个id
字段。我试图遍历嵌套的字典并提取每个值,并将其添加到子字典中,但我什至没有接近解决方案。有没有更好的方法可以做到这一点。
答案 0 :(得分:1)
mylst=[{ 'person': [{
"id" : "abc",
"name" : "xyz",
"address" : {"co-ord" : "123", "place" : "world"},
"previous companies" :[{"comp1" : "name1"}, {"comp2":"name2"}]
}]
}]
lst=[]
for k,v in mylst[0].items():
for ki in (v[0].keys()):
d={}
if(ki!='id'):
d['Id']=v[0]['id']
d[ki]=v[0][ki]
if d:
lst.append(d)
输出:
[{'Id': 'abc', 'name': 'xyz'},
{'Id': 'abc', 'address': {'co-ord': '123', 'place': 'world'}},
{'Id': 'abc', 'previous companies': [{'comp1': 'name1'}, {'comp2': 'name2'}]}]
答案 1 :(得分:1)
遍历所有人员并获取该人员的ID。然后循环浏览除id
键以外的所有键。创建具有两个键的字典:id
和key
,将数据注入到key
和id
键中。
通过将数据附加到某种数据结构中来存储数据。假设它必须是列表,因为您将有一个以上的人。
data = [{ "person": [{
"id" : "abc",
"name" : "xyz",
"address": {"co-ord" : "123", "place" : "world"},
"previous companies": [{"comp1" : "name1"}, {"comp2":"name2"}]
}]
}]
root = {}
for item in data:
person_data = item['person']
for person in person_data:
for key in person.keys():
if key != 'id':
sub_dict = {}
sub_dict[key] = person[key]
sub_dict['id'] = person['id']
if not key in root:
root[key] = []
root[key].append( sub_dict )
这将输出包含除id
键以外的所有键的字典:字典元素还包含具有两个键的字典列表:实际数据和获取其数据的人员的ID。您可以将内部字典替换为元组(id
,data
),因为重复键是多余的。
{
'previous companies': [{'previous companies': [{'comp1': 'name1'}, {'comp2': 'name2'}], 'id': 'abc'}],
'name': [{'name': 'xyz', 'id': 'abc'}],
'address': [{'id': 'abc', 'address': {'place': 'world', 'co-ord': '123'}}]
}
答案 2 :(得分:0)
您还使用字典理解
mylst = [{'person': [{"id": "abc", "name": "xyz", "address": {"co-ord": "123", "place": "world"},
"previous companies": [{"comp1": "name1"}, {"comp2": "name2"}]}]}]
print({'Person_' + (z.split())[-1]:[{'id': y['id'], z: y[z]}] for x in mylst for y in x['person'] for z in y.keys() if z != 'id'})
您将获得以下输出:
{'Person_address': [{'address': {'place': 'world', 'co-ord': '123'}, 'id': 'abc'}], 'Person_name': [{'id': 'abc', 'name': 'xyz'}], 'Person_companies': [{'previous companies': [{'comp1': 'name1'}, {'comp2': 'name2'}], 'id': 'abc'}]}
如果您想用简单的方式写,那就是字典理解
for x in mylst:
for y in x['person']:
for z in y.keys():
print({'Person_' +(z.split())[-1]: [{'id': y['id'], z: y[z]}]})
现在我希望你了解我的所作所为,但仍然有任何疑问然后问我