我正在尝试将以下嵌套字典写入带有标题的 CSV。
headers = [ 'Location', 'Agent', 'Sales', 'Renewals', 'Leaves']
data = {'Location1' : {'Bob': {'Sales': 2, 'Renewals': 1, 'Leaves': 1},
'Jim': {'Sales': 1, 'Renewals': 2, 'Leaves': 3}},
'Location, 2': {'Tod': {'Sales': 1, 'Renewals': 3, 'Leaves': 1},
'Joe': {'Sales': 3, 'Renewals': 4, 'Leaves': 2}},
'Location 3' : {'Bill': {'Sales': 1, 'Renewals': 4, 'Leaves': 5}}
}
我不熟悉 csv 模块,我查找的指南似乎已经过时,或者确实可以使用嵌套的字典。
我期待以下输出:
Location, Agent, Sales, Renewals, Leaves
Location1, Bob, 2, 1, 1
Location1, Jim, 1, 2, 3
Location2, Tod, 1, 3, 1
编辑: 修改数据字典以更好地反映正在使用的内容并使用最佳实践。
您可以在没有 csv 库的情况下通过使用 for 循环手动创建输出来完成此操作:
# Declare headers and data
headers = ['Location', 'Agent', 'Sales', 'Renewals', 'Leaves']
data = {'Location1': {'Bob': {'Sales': 2, 'Renewals': 1, 'Leaves': 1}},
'Location1': {'Jim': {'Sales': 1, 'Renewals': 2, 'Leaves': 3}},
'Location2': {'Tod': {'Sales': 1, 'Renewals': 3, 'Leaves': 1}}
}
# Add the headers to output
output = ','.join(headers)
# Cycle through data
for key, value in data.items():
# Declare the items of the row
row = [key, *value.keys(), *list(value.values())[0].values()]
# Convert all ints to strings
row = [str(x) for x in row]
# Add the data to output
output += '\n' + ','.join(row)
# Write the output to a file
with open('data.csv', 'w') as file:
file.write(output)
这会将数据以 csv 格式写入到
data.csv
:
Location,Agent,Sales,Renewals,Leaves
Location1,Bob,2,1,1
Location2,Jim,1,2,3
Location3,Tod,1,3,1
请注意,
data
字典中有重复的键,这通常不是一个好的做法,但在将其导出到 csv 文件时可以接受。结果中也不包含空格,因为每个值前面都有一个空格。
如果有帮助,请使用复选标记接受我的答案:)