Python3:将嵌套字典写入 CSV

问题描述 投票:0回答:1

我正在尝试将以下嵌套字典写入带有标题的 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

编辑: 修改数据字典以更好地反映正在使用的内容并使用最佳实践。

python-3.x csv export-to-csv
1个回答
0
投票

您可以在没有 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 文件时可以接受。结果中也不包含空格,因为每个值前面都有一个空格。

如果有帮助,请使用复选标记接受我的答案:)

© www.soinside.com 2019 - 2024. All rights reserved.