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

使用collections.defaultdict(list)出现TypeError: unhashable type: 'list'错误求助

解决TypeError: unhashable type: 'list'问题

问题场景

尝试用collections.defaultdict(list)关联数据框的文本列与图片路径列,编写的代码如下:

image_path_to_caption = collections.defaultdict(list)

import pandas as pd
df = pd.read_csv("/content/drive/MyDrive/IU-Xray/my_data.csv") 
extensions = ('.png','.jpg','.jpeg')
path = '/conent/drive/MyDrive/iuxray/images/images_normalized'
images = df[df['filename'].str.endswith(extensions)]['filename']
findings = df['findings']
paths = [f'{path}/{i}' for i in images]
image_path_to_caption[paths].append(findings)

执行image_path_to_caption[paths].append(findings)时出现错误:

TypeError: unhashable type: 'list'

错误原因

字典的键必须是可哈希的不可变类型(如字符串、整数、元组等),而paths是一个列表,列表属于可变类型无法被哈希,因此不能作为字典的键。同时findings是整个数据框的列对象,直接append会把整个Series添加进去,不符合“单条文本对应单条路径”的关联需求。

修正方案

步骤说明

  1. 调整导入顺序,先加载所需模块
  2. 过滤数据框时保留完整行,确保filename和findings的索引严格匹配
  3. 遍历每一对路径与文本,逐个添加到defaultdict中

修正后代码

import pandas as pd
from collections import defaultdict

# 初始化defaultdict
image_path_to_caption = defaultdict(list)

df = pd.read_csv("/content/drive/MyDrive/IU-Xray/my_data.csv") 
extensions = ('.png','.jpg','.jpeg')
path = '/content/drive/MyDrive/iuxray/images/images_normalized'

# 过滤出含有效图片格式的行,保证filename与findings一一对应
filtered_df = df[df['filename'].str.endswith(extensions)]

# 遍历每一行,关联路径与对应文本
for filename, finding in zip(filtered_df['filename'], filtered_df['findings']):
    img_full_path = f"{path}/{filename}"
    image_path_to_caption[img_full_path].append(finding)

代码解释

  • 先过滤整个数据框filtered_df,避免单独提取列导致的索引错位问题
  • 用zip配对每一行的filename和findings,确保每条文本都对应正确的图片路径
  • 以单个字符串格式的图片路径作为键,将对应文本添加到该键的列表中,完全匹配defaultdict(list)的使用逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:35:23