[英]Convert the nested json into a dictionary format with no nested objects
我有以下格式的輸入數據:
data = [[u'Richard', u'48', [u'Josh', u'Beth'], {u'city': u'Seattle', u'Disability': u'no', u'enterprenuer': u'yes'}], [u'Bryan', u'32',[], {u'city': u'NY', u'enterprenuer': u'no', u'wfh': u'yes', u'disability': u'no', u'Visa': u'no'}]]
稍后在執行json.dumps
變為:
[["Richard", "48", ["Josh", "Beth"], {"city": "Seattle", "enterprenuer": "yes", "Disability": "no"}], ["Bryan", "32", [], {"Visa": "no", "city": "NY", "wfh": "yes", "enterprenuer": "no", "disability": "no"}]]
另外,我還有另一個列表,該列表包含該字典的鍵:
key_list = ["Name", "Age", "Children", "details"]
我嘗試了以下代碼:
list_of_dicts = []
for d in data:
dict = {}
for i in range(0, len(key_list)-1):
dict[key_list[i]] = d[i]
list_of_dicts.append(dict)
這樣我就可以得到new_dict
:
[{'Age': u'48', 'Name': u'Richard', 'Children': [u'Josh', u'Beth']}, {'Age': u'32', 'Name': u'Bryan', 'Children': []}]
但是我無法將嵌套的dict從data
到new_dict
而無需再次在其上運行代碼。 我不想多次運行操作。 另外,我也在考慮是否還有更好的方法來刪除嵌套列表,但是在多次嘗試后,我被跟蹤並弄亂了我的代碼。
這是預期的輸出:
[{"Name":"Richard","Age":"48","Children":"Josh,Beth","city":"Seattle","enterprenuer":"yes","Disability":"no"},{"Name":"Bryan","Age":"32","Children":"","Visa":"no","city":"NY","wfh":"yes","enterprenuer":"no","disability":"no"}]
你可以試試:
1)在python3中:
from pprint import pprint
data = [["Richard", "48", ["Josh", "Beth"], {"city": "Seattle", "enterprenuer": "yes", "Disability": "no"}], ["Bryan", "32", [], {"Visa": "no", "city": "NY", "wfh": "yes", "enterprenuer": "no", "disability": "no"}]]
key_list = ["Name", "Age", "Children", "details"]
pprint([dict(zip(key_list[:2], e[:2]), **{key_list[2]: ','.join(e[2])}, **e[3]) for e in data])
輸出:
[{'Name': 'Richard',
'Age': '48',
'Children': 'Josh,Beth',
'city': 'Seattle',
'Disability': 'no',
'enterprenuer': 'yes'},
{'Name': 'Bryan',
'Age': '32',
'Children': '',
'city': 'NY',
'enterprenuer': 'no',
'wfh': 'yes',
'disability': 'no',
'Visa': 'no'}]
2)在python2中:
pprint([dict(zip(key_list[:2], e[:2]), **dict([(key_list[2], ','.join(e[2]))], **e[3])) for e in data])
輸出:
[{'Age': '48',
'Children': 'Josh,Beth',
'Disability': 'no',
'Name': 'Richard',
'city': 'Seattle',
'enterprenuer': 'yes'},
{'Age': '32',
'Children': '',
'Name': 'Bryan',
'Visa': 'no',
'city': 'NY',
'disability': 'no',
'enterprenuer': 'no',
'wfh': 'yes'}]
data = [["Richard", "48", ["Josh", "Beth"], {"city": "Seattle", "enterprenuer": "yes", "Disability": "no"}], ["Bryan", "32", [], {"Visa": "no", "city": "NY", "wfh": "yes", "enterprenuer": "no", "disability": "no"}]]
key_list = ["Name", "Age", "Children", "details"]
out = []
for item in data:
d = {}
out.append(d)
for value, keyname in zip(item, key_list):
if isinstance(value, dict):
d.update(**value)
elif isinstance(value, list):
d[keyname] = ','.join(value)
else:
d[keyname] = value
from pprint import pprint
pprint(out)
印刷品:
[{'Age': '48',
'Children': 'Josh,Beth',
'Disability': 'no',
'Name': 'Richard',
'city': 'Seattle',
'enterprenuer': 'yes'},
{'Age': '32',
'Children': '',
'Name': 'Bryan',
'Visa': 'no',
'city': 'NY',
'disability': 'no',
'enterprenuer': 'no',
'wfh': 'yes'}]
您可以使用簡單的拆包:
data = [[u'Richard', u'48', [u'Josh', u'Beth'], {u'city': u'Seattle', u'Disability': u'no', u'enterprenuer': u'yes'}], [u'Bryan', u'32',[], {u'city': u'NY', u'enterprenuer': u'no', u'wfh': u'yes', u'disability': u'no', u'Visa': u'no'}]]
key_list = ["Name", "Age", "Children", "details"]
r = [{**dict(zip(key_list[:-1], a[:-1]+[','.join(a[-1])])), **b} for *a, b in data]
輸出:
[{'Name': 'Richard', 'Age': '48', 'Children': 'Josh,Beth', 'city': 'Seattle', 'Disability': 'no', 'enterprenuer': 'yes'}, {'Name': 'Bryan', 'Age': '32', 'Children': '', 'city': 'NY', 'enterprenuer': 'no', 'wfh': 'yes', 'disability': 'no', 'Visa': 'no'}]
編輯:Python2.7解決方案:
data = [[u'Richard', u'48', [u'Josh', u'Beth'], {u'city': u'Seattle', u'Disability': u'no', u'enterprenuer': u'yes'}], [u'Bryan', u'32',[], {u'city': u'NY', u'enterprenuer': u'no', u'wfh': u'yes', u'disability': u'no', u'Visa': u'no'}]]
key_list = ["Name", "Age", "Children", "details"]
r = [dict(zip(key_list[:-1], i[:2]+[','.join(i[2])])+i[-1].items()) for i in data]
輸出:
[{u'city': u'Seattle', 'Name': u'Richard', 'Age': u'48', u'enterprenuer': u'yes', u'Disability': u'no', 'Children': u'Josh,Beth'}, {u'city': u'NY', u'wfh': u'yes', 'Name': u'Bryan', 'Age': u'32', u'enterprenuer': u'no', u'disability': u'no', u'Visa': u'no', 'Children': ''}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.