[英]Create multiple sub dictionaries from a nested dictionary
我有一個用例,其中我必須創建多個子詞典以將嵌套詞典拆分為最多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
字段。 我試圖遍歷嵌套的字典並提取每個值,並將其添加到子字典中,但我什至沒有接近解決方案。 有沒有更好的方法可以做到這一點。
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'}]}]
遍歷所有人員並獲取該人員的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'}}]
}
您還可以使用字典理解
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'}]}
如果您想用簡單的方式寫,那就是Dictionary Comprehensions
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]}]})
現在我希望你了解我的所作所為,但仍然有任何疑問,然后問我
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.