树形结构的字典写入excel的问题

{“keyword1”: {
“ keyword1.1”: {
“ keyword 1.1.1”: {}
“ keyword 1.1.2”: {}
},
“ keyword1.2”: {
“ keyword 1.2.1”: {}
“ keyword 1.2.2”: {}
},
}
}
类似这样的很多层的字典想写入excel文件。为了保持树形的特点和下一步操作的便利

keyword1写入A1单元格,
keyword1.1写入B1单元格,
keyword 1.1.1写入C1单元格,
keyword 1.1.2写入C2单元格,
keyword1.2写入B3单元格,
keyword 1.2.1写入C3单元格,
keyword 1.2.2写入C 4单元格。

用递归函数怎么写?我是小白,试了很多次都不成功。谢谢

Jason990420
最佳答案
import xlsxwriter

class Worksheet():

    def __init__(self, filename):
        self.workbook  = xlsxwriter.Workbook(filename)
        self.worksheet = self.workbook.add_worksheet()

    def write(self, dct, row=0, col=0):
        for key, value in dct.items():
            self.worksheet.write(row, col, key)
            print('  '*col + f'{key}')
            if value:
                row = self.write(value, row, col+1)
            else:
                row += 1
        return row

    def close(self):
        self.workbook.close()

dct = {
    "keyword 1": {
        "keyword 1.1": {
            "keyword 1.1.1": {},
            "keyword 1.1.2": {},
        },
        "keyword 1.2": {
            "keyword 1.2.1": {},
            "keyword 1.2.2": {},
        },
    },
}

worksheet = Worksheet("D:/tree.xlsx")
worksheet.write(dct)
worksheet.close()
7个月前 评论
raybon 7个月前
讨论数量: 7
Jason990420
import xlsxwriter

class Worksheet():

    def __init__(self, filename):
        self.workbook  = xlsxwriter.Workbook(filename)
        self.worksheet = self.workbook.add_worksheet()

    def write(self, dct, row=0, col=0):
        for key, value in dct.items():
            self.worksheet.write(row, col, key)
            print('  '*col + f'{key}')
            if value:
                row = self.write(value, row, col+1)
            else:
                row += 1
        return row

    def close(self):
        self.workbook.close()

dct = {
    "keyword 1": {
        "keyword 1.1": {
            "keyword 1.1.1": {},
            "keyword 1.1.2": {},
        },
        "keyword 1.2": {
            "keyword 1.2.1": {},
            "keyword 1.2.2": {},
        },
    },
}

worksheet = Worksheet("D:/tree.xlsx")
worksheet.write(dct)
worksheet.close()
7个月前 评论
raybon 7个月前
from openpyxl import Workbook

current_row = 1

def write_dict_to_excel(ws, nested_dict, current_col):
    global current_row
    start_row = current_row

    for key, sub_dict in nested_dict.items():
        ws.cell(row=current_row, column=current_col, value=key)
        if sub_dict:  # 如果子字典不为空
            # 递归处理子字典
            write_dict_to_excel(ws, sub_dict, current_col + 1)
        current_row += 1  # 换行

    # 重置到起始行写下一个主键
    current_row = start_row + len(nested_dict)

if __name__ == "__main__":
    wb = Workbook()
    ws = wb.active

    data = {
        "keyword1": {
            "keyword1.1": {
                "keyword1.1.1": {},
                "keyword1.1.2": {}
            },
            "keyword1.2": {
                "keyword1.2.1": {},
                "keyword1.2.2": {}
            }
        }
    }

    write_dict_to_excel(ws, data, 1)
    wb.save("output.xlsx")
7个月前 评论

Jason990420的方案是对的,我想问一下
if value: row = self.write(value, row, col+1)中 self.write(value, row, col+1)我能看明白,用row =是什么用途,谢谢

7个月前 评论
Jason990420 7个月前

Rathalos 你的代码有一个问题,中间有一个空行,我没找出错误在哪里。

file

7个月前 评论

current_row += 1 # 换行 发现这个前面加个else 就可以了

7个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!