鱼C论坛

 找回密码
 立即注册
查看: 3109|回复: 2

[已解决]求教报错'dict_keys' object is not subscriptable

[复制链接]
发表于 2023-1-2 09:54:45 | 显示全部楼层 |阅读模式
10鱼币

各位大佬好!我在做文本词频统计,构建了一个字典“words_report”,想把字典导入到excel中。
遇到的问题是,在命令“ws1.cell(row=i, column='A').value = keys_report[i-1]”这一行报错'dict_keys' object is not subscriptable,求指导

from openpyxl import Workbook
import openpyxl
import jieba
import re
import os

os.chdir('XXXXXX')

wb = openpyxl.load_workbook('xxxxx.xlsx')
ws = wb.active
words_report = {}

for row in range(2, ws.max_row + 1):
    words_deal = re.sub("(.*?)", "", ws['D' + str(row)].value)
    words_split = jieba.cut(words_deal)
    for word in words_split:
        if len(word) >= 2:
            if word in words_report:
                words_report[word] += 1
            else:
                words_report.setdefault(word, 1)

wb1 = Workbook()
ws1 = wb1.create_sheet(title='sheet1')

for i in range(1, len(words_report)):
    keys_report = words_report.keys()
    values_report = words_report.values()
    ws1.cell(row=i, column='A').value = keys_report[i-1]
    ws1.cell(row=i, column='B').value = values_report[i-1]

wb1.save(filename='xxxxx.xlsx')
print('ok')
最佳答案
2023-1-2 09:54:46
‘dict_keys’类型的对象不能进行索引操作,原因是dict的value()和key()返回的并不是一个真正的数组,只需要用list()强制转换一下即可:
keys_report = list(words_report.keys())
values_report = list(words_report.values())

最佳答案

查看完整内容

‘dict_keys’类型的对象不能进行索引操作,原因是dict的value()和key()返回的并不是一个真正的数组,只需要用list()强制转换一下即可:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-2 09:54:46 | 显示全部楼层    本楼为最佳答案   
‘dict_keys’类型的对象不能进行索引操作,原因是dict的value()和key()返回的并不是一个真正的数组,只需要用list()强制转换一下即可:
keys_report = list(words_report.keys())
values_report = list(words_report.values())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-1-2 09:59:24 | 显示全部楼层
我查资料,d.values和d.keys返回的是一个由 d 字典中每个项的 “值”或 “键” 构成的字典视图对象。这个时候要怎么将其中元素取出来呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表