解压缩嵌套词典列表并转换为CSV

时间:2017-09-23 19:07:47

标签: python json pandas csv

我正在尝试写一个生成嵌套字典列表的JSON,如下所示:

[{'spam': 'xxxx',
  'egg': 'yyyy',
  'line_items': [{'description': 'hhh',
                  'amount': 'iii'},
                 {'description': 'jjj',
                  'amount': 'kkk'}],
  'bacon': 'zzzz'}]

我编写了以下代码(对Python来说仍然是新手):

import csv

jsonData = json.loads(r.text)
keys = list(jsonData[0].keys())
with open(filePathCsv, 'w') as csvfile:
    w = csv.DictWriter(csvfile, keys)
    w.writeheader()
    w.writerows(jsonData)

这会产生以下结果:

CSV output

我需要做的是:

Expected output

其中每个嵌套的订单项都会生成一个新行。

我想最好的方法是将我的嵌套字典列表解压缩到一个简单的字典列表中,如下所示:

[{'spam': 'xxxx',
  'egg': 'yyyy',
  'description': 'hhh',
  'amount': 'iii',
  'bacon': 'zzzz'},
 {'spam': 'xxxx',
    'egg': 'yyyy',
    'description': 'jjj',
    'amount': 'kkk',
    'bacon': 'zzzz'}]

但我对如何实现这一点感到茫然。

或许还有另一种方法可以实现我的预期结果?

1 个答案:

答案 0 :(得分:1)

  

或许还有另一种方法可以实现我的预期结果?

如果您使用pandas,那么使用json_normalize就可以实现这一点:

import pandas as pd

data = [{'spam': 'xxxx',
  'egg': 'yyyy',
  'line_items': [{'description': 'hhh',
                  'amount': 'iii'},
                 {'description': 'jjj',
                  'amount': 'kkk'}],
  'bacon': 'zzzz'}]

df = pd.io.json.json_normalize(data, record_path=['line_items'],
                                meta=['spam', 'egg','bacon'])
df

  amount description   egg  spam bacon
0    iii         hhh  yyyy  xxxx  zzzz
1    kkk         jjj  yyyy  xxxx  zzzz
df.to_csv('out.csv')