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

如何将嵌套字典的子字典写入CSV?解决dict_values下标错误

解决dict_values无法下标访问并将子字典写入CSV的问题

问题原因

你碰到的TypeError: 'dict_values' object is not subscriptable错误,是因为new_dict.values()返回的是dict_values视图对象——它是可迭代对象,但不支持像列表那样用下标(比如[0])直接访问元素。

解决方案

有两种简单方式解决这个问题,同时完成CSV写入需求:

方式1:将dict_values转为列表

把视图对象转换成普通列表,就能正常用下标访问第一个子字典的键作为表头:

import csv

# 你的数据处理代码
new_dict = {}
for ip, host, os, vuln_title, vuln_id, cvss2, cvss3, descr, proof, solu, cves in data[1:]:
    vuln_data = new_dict.setdefault(vuln_id, {"Vulnerability ID": vuln_id, "Name": host, "Affected IP Address": [], "Risk Exposure": cvss3})
    vuln_data["Affected IP Address"].append(ip)

# 修正后的CSV写入代码
new_list = list(new_dict.values())  # 转为列表
if new_list:  # 先判断字典非空,避免索引错误
    keys = new_list[0].keys()
    with open('output.csv', 'w', newline='', encoding='utf-8') as output_file:
        dict_writer = csv.DictWriter(output_file, keys)
        dict_writer.writeheader()
        # 可选:将列表类型的IP地址转为字符串,避免CSV显示[xxx, xxx]格式
        for item in new_list:
            item["Affected IP Address"] = ', '.join(item["Affected IP Address"])
        dict_writer.writerows(new_list)

方式2:用迭代器获取第一个子字典(更高效)

如果字典数据量很大,转列表会占用额外内存,可以直接用迭代器获取第一个子字典的键,无需转换整个视图:

import csv

# 数据处理代码同上...

if new_dict:  # 判断字典非空
    # 从迭代器中取出第一个子字典的键
    keys = next(iter(new_dict.values())).keys()
    with open('output.csv', 'w', newline='', encoding='utf-8') as output_file:
        dict_writer = csv.DictWriter(output_file, keys)
        dict_writer.writeheader()
        # 同样处理IP列表转字符串
        for vuln_data in new_dict.values():
            vuln_data["Affected IP Address"] = ', '.join(vuln_data["Affected IP Address"])
        dict_writer.writerows(new_dict.values())

额外提示

  • 必须判断new_dict是否为空,否则无数据时new_list[0]或next(iter(...))会抛出异常
  • 写入CSV时建议指定encoding='utf-8',避免中文乱码
  • 子字典中的Affected IP Address是列表类型,直接写入会显示['192.168.1.1', '192.168.1.2']格式,用', '.join()转成逗号分隔的字符串更符合CSV阅读习惯

内容的提问来源于stack exchange,提问作者Mitchell Privett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:20:37