簡體   English   中英

將嵌套的json轉換為沒有嵌套對象的字典格式

[英]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從datanew_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM