我要导出一个包含字典列表的字典,作为每个 key:value 对的值:
dict = {'key_1':
[{'key_a': foo_1, 'key_b': bar_1},
{'key_a': foo_2, 'key_b': bar_2}],
'key_2':
[{'key_c': foo_1, 'key_d': bar_1}],
{'key_c': foo_2, 'key_d': bar_2}]
...}
所需的输出将是一个.csv文件,该文件具有第一个字典的键(键_1,键_2等)作为第一标题行,然后是嵌套字典的键(键_a,键_b等)。 ,作为对应于其相应键的第二个标题行。
所需输出的示例如下所示,其中列表索引列引用字典中字典列表中每个相应索引处存储的数据:
╔════════════╦═══════════════╤═══════════════╗
║ ║ key_1 │ key_2 ║
║ List Index ╠═══════╤═══════╪═══════╤═══════╣
║ ║ key_a │ key_b │ key_c │ key_d ║
╠════════════╬═══════╪═══════╪═══════╪═══════╣
║ 0 ║ foo_1 │ bar_1 │ foo_1 │ bar_1 ║
╟────────────╫───────┼───────┼───────┼───────╢
║ 1 ║ foo_2 │ bar_2 │ foo_2 │ bar_2 ║
╟────────────╫───────┼───────┼───────┼───────╢
║ 2 ║ foo_3 │ bar_3 │ foo_3 │ bar_3 ║
╚════════════╩═══════╧═══════╧═══════╧═══════╝
平台: Raspberry Pi 3b +,Python 3.6
当前,我正在研究执行此操作的不同选项,因此没有任何连贯的代码可以正常工作。但是,按照优先顺序,我正在考虑以下几种选择:
使用熊猫形成一个数组,该数组反映所需表的性质。然后将其直接写入CSV。
从上述字典数据结构写入CSV。
import csv
field_names = dict.keys()
header2 = {'%s' %dict.keys() : dict[key_1][0].keys()}
with open('project_data.csv', 'a') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=field_names)
writer.writeheader() # Write header row containing the top field names
writer.writerow(header2) #Write row containing the second field names
显而易见,此代码需要进一步开发才能使其按需工作。
我没有考虑过的另一种方法?
以这种格式写入CSV的最佳方法是什么?
答案 0 :(得分:3)
到目前为止,我已经到达这里:
17.5 Reset Button
为您提供:
d = {'key_1':
[{'key_a': 'foo_1', 'key_b': 'bar_1'},
{'key_a': 'foo_2', 'key_b': 'bar_2'}],
'key_2':
[{'key_c': 'foo_1', 'key_d': 'bar_1'},
{'key_c': 'foo_2', 'key_d': 'bar_2'}]}
df = pd.DataFrame(d)
df1 = []
for col in df.columns:
data = df[col].apply(pd.Series)
data = df1.append(data)
df1 = pd.concat(df1,axis=1)
print(df1)
其他情况下,您必须根据原始列名映射各个键,并且tat可以作为标识符放置在 key_a key_b key_c key_d
0 foo_1 bar_1 foo_1 bar_1
1 foo_2 bar_2 foo_2 bar_2
中。知道后,我会更新。
答案 1 :(得分:1)
此处的“列表索引”是一个合并的单元格,您无法在CSV文件中实现此功能,因为它不包含格式。您可以:
a)将其写入xlsx文件(XlsxWriter是一个很棒的库)
b)保留为CSV,但如anky_91所建议的那样具有未合并的单元格