数据采集遇TypeError:tuple indices must be integers or slices, not str问题求助
解决 TypeError: tuple indices must be integers or slices, not str 问题
首先,咱们先拆解这个错误的根源:你代码里的某个元组(tuple)被你用字符串去索引了——元组只能用整数或者切片来定位元素,用字符串肯定会报错。结合你的代码和需求,我帮你梳理问题和修正方案:
问题1:元组索引误用
你初始化data_employer的时候,把'No'对应的值设成了元组('Column', 'Sum'):
data_employer = {'No': ('Column', 'Sum')}
如果后续你尝试用类似data_employer['No']['Column']的方式去访问,就会触发这个TypeError,因为元组不支持字符串索引。
问题2:逻辑笔误
你的累加代码写错了:sum =+1其实是把sum赋值为+1,正确的累加应该是sum +=1,不然统计出来的永远是1,完全不符合你的需求。
修正后的完整代码
结合你要生成的输出,我帮你补全并修正代码:
# 先定义列名,对应你要统计的14个列 column_names = [ 'Company', 'Booth', 'Full-Time', 'Full-Time Visa Sponsor', 'Part-Time', 'Internship', 'Freshman', 'Sophomore', 'Junior', 'Senior', 'Post-Bacs', 'MS', 'PhD', 'Alumni' ] data_employer = {} # 先写入表头对应关系 data_employer['No'] = ('Column', 'Sum') for vari in range(14): sum_count = 0 for row in ReadyColumn: # 确保row是可索引的(比如列表或元组),这里用整数索引没问题 if row[vari] != '': sum_count += 1 # 将统计结果加入字典,用数字作为键,对应(列名, 统计值)的元组 data_employer[vari] = (column_names[vari], sum_count) # 打印输出你要的格式 print("No Column Sum") for key in data_employer: if key == 'No': continue print(f"{key} {data_employer[key][0]} {data_employer[key][1]}")
关键说明
- 新增了
column_names列表,对应你要统计的所有列名,确保每一列的统计结果能准确匹配名称; - 把累加变量从
sum改成sum_count(避免和内置函数sum()重名),同时修正了累加的写法; - 存储统计结果时,用数字作为
data_employer的键,对应的值是(列名, 统计数)的元组,后续打印时用整数索引元组元素,就不会触发类型错误了; - 打印逻辑完全匹配你期望的输出格式,跳过表头的
'No'键,直接遍历数字键输出内容。
这样运行代码后,就能得到你想要的结果啦。
内容的提问来源于stack exchange,提问作者PKPython




