4

我有以下格式的输入数据:

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"}]]

另外,我还有另一个列表,其中包含 dict 的键:

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': []}]

但是我无法将嵌套的字典从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"}]
4

3 回答 3

1

你可以试试:

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'}]
于 2019-08-21T05:50:54.283 回答
0
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'}]
于 2019-08-21T05:29:51.567 回答
0

您可以使用简单的解包:

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': ''}]
于 2019-08-21T15:06:30.107 回答