You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中含嵌套列表的字典数据如何正确存储至CSV?

解决Python字典含嵌套列表转CSV的问题

针对你这种混合了普通字段和嵌套列表的字典数据,我整理了3种实用方案,你可以根据自己的使用场景来选:

方案1:将嵌套列表合并为单行文本(适合快速查看)

如果只是想把所有内容塞进CSV,且不需要后续单独提取列表里的元素,可以把每个嵌套列表用分隔符(比如换行、分号)合并成一个字符串,这样前4个字段保持原样,嵌套字段也能在一个单元格里清晰显示。

示例代码:

import csv

# 你的原始字典
data_dict = {
    'ID': '1',
    'Name': 'PROF DR BACHTIAR ALY MA',
    'Faction': 'National Democrat Party Faction',
    'Constituency': 'ACEH I',
    'Educational Background': ['Sekolah Rakyat Tahun: - 1963', ' SMPN 1 Banda Aceh Tahun: - 1965', 'IPS SMA YPU Bandung Tahun: - 1968', 'Fakultas Publistik UNPAD Tahun: 1969 - 1971', 'Komunikasi Westfaelishe Wilhemlins Tahun: 1974 - ', 'Philosophische Universitas Westfalischen Jerman Tahun: - 1984'],
    'Working Experience': ['Pokja Pengaduan Dewan Pers Sebagai: Anggota Tahun: 2003 - 2006', 'Anggota Dewan Pers Sebagai: Anggota Tahun: 2000 - 2003', 'Penasehat Ahli Kapolri Sebagai: Penasehat Tahun: 1999 - 2014', 'Konsultan PT Arun Sebagai: Tahun: 1989 - 1994', 'Kadin Indonesia Komite Cina Sebagai: Staf Ahli Tahun: 1985 - 1986', 'Penasehat Presiden Urusan Aceh Sebagai: Penasehat Tahun: - '],
    'Organizational': ['BAKOM PKB Sebagai: Ketua Tahun: 1990 - 1995', 'PPI & IASI Jerman Sebagai: Ketua Tahun: 1976 - 1982', 'Ketua Warga SMP & Ketua Osis SMA Sebagai: Tahun: 1965 - 1968', 'KAPPI Daerah Itimewa Aceh Sebagai: Ketua Tahun: - 1968'],
    'Movement': ['KAPPI Aceh - Ketua Tahun: - 1968']
}

# 处理嵌套列表:用换行符合并,Excel打开时可设置单元格自动换行
processed_data = {}
for key, value in data_dict.items():
    if isinstance(value, list):
        processed_data[key] = '\n'.join(value)
    else:
        processed_data[key] = value

# 写入CSV
with open('politician_data.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.DictWriter(f, fieldnames=processed_data.keys())
    writer.writeheader()
    writer.writerow(processed_data)

优点:操作简单,保留单条记录结构,可读性强;缺点:后续如果要拆分列表元素需要额外处理。

方案2:利用CSV多行单元格特性(兼顾可读性和可编辑性)

CSV本身支持单元格内换行,只要把包含换行的内容用引号包裹,Python的csv模块会自动处理这个逻辑。其实方案1的代码已经实现了这个效果——当你用'\n'合并列表时,写入CSV时模块会自动给这个单元格加引号,打开Excel/Numbers时,只要设置单元格“自动换行”,就能看到每行单独显示,完全不影响前4个字段的可读性。

方案3:规范化拆分记录(适合数据分析/数据库导入)

如果后续需要对教育背景、工作经历这些字段做单独分析(比如统计某类经历的人数),最专业的做法是把嵌套列表拆分成多条记录,重复前4个基础字段,每条记录对应一个列表元素。

示例代码(用pandas更简洁):

import pandas as pd

# 原始字典
data_dict = {
    'ID': '1',
    'Name': 'PROF DR BACHTIAR ALY MA',
    'Faction': 'National Democrat Party Faction',
    'Constituency': 'ACEH I',
    'Educational Background': ['Sekolah Rakyat Tahun: - 1963', ' SMPN 1 Banda Aceh Tahun: - 1965', 'IPS SMA YPU Bandung Tahun: - 1968', 'Fakultas Publistik UNPAD Tahun: 1969 - 1971', 'Komunikasi Westfaelishe Wilhemlins Tahun: 1974 - ', 'Philosophische Universitas Westfalischen Jerman Tahun: - 1984'],
    'Working Experience': ['Pokja Pengaduan Dewan Pers Sebagai: Anggota Tahun: 2003 - 2006', 'Anggota Dewan Pers Sebagai: Anggota Tahun: 2000 - 2003', 'Penasehat Ahli Kapolri Sebagai: Penasehat Tahun: 1999 - 2014', 'Konsultan PT Arun Sebagai: Tahun: 1989 - 1994', 'Kadin Indonesia Komite Cina Sebagai: Staf Ahli Tahun: 1985 - 1986', 'Penasehat Presiden Urusan Aceh Sebagai: Penasehat Tahun: - '],
    'Organizational': ['BAKOM PKB Sebagai: Ketua Tahun: 1990 - 1995', 'PPI & IASI Jerman Sebagai: Ketua Tahun: 1976 - 1982', 'Ketua Warga SMP & Ketua Osis SMA Sebagai: Tahun: 1965 - 1968', 'KAPPI Daerah Itimewa Aceh Sebagai: Ketua Tahun: - 1968'],
    'Movement': ['KAPPI Aceh - Ketua Tahun: - 1968']
}

# 分离普通字段和嵌套字段
base_fields = {k: v for k, v in data_dict.items() if not isinstance(v, list)}
list_fields = {k: v for k, v in data_dict.items() if isinstance(v, list)}

# 生成规范化的记录
rows = []
for field_name, items in list_fields.items():
    for item in items:
        row = base_fields.copy()
        row['Category'] = field_name
        row['Detail'] = item
        rows.append(row)

df = pd.DataFrame(rows)
df.to_csv('politician_normalized.csv', index=False, encoding='utf-8')

生成的CSV结构示例:

IDNameFactionConstituencyCategoryDetail
1PROF DR BACHTIAR ALY MANational Democrat Party FactionACEH IEducational BackgroundSekolah Rakyat Tahun: - 1963
1PROF DR BACHTIAR ALY MANational Democrat Party FactionACEH IEducational BackgroundSMPN 1 Banda Aceh Tahun: - 1965

优点:符合数据库规范化设计,方便后续数据分析;缺点:会增加记录行数,不适合单纯查看整体信息。

你可以根据自己的需求选:如果只是存档查看,选方案1/2;如果要做数据分析,选方案3。

内容的提问来源于stack exchange,提问作者Jefferson Ng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:05:40