【问题标题】:.index() generates AttributeError: 'dict_values' object has no attribute 'index'.index() 生成 AttributeError: 'dict_values' 对象没有属性 'index'
【发布时间】:2018-03-08 17:50:29
【问题描述】:

我正在尝试将此 Python2 代码重写为 Python3 可接受的语法。 .index() 方法会产生以下错误:

AttributeError: 'dict_values' 对象没有属性 'index'

这是因为 .index() 在 Python3 中不是有效的语法。我读过应该使用一个列表来解决这个问题,但我不知道该怎么做。有人知道如何解决这个问题吗?

words1 = [self._word_to_id.keys()[self._word_to_id.values().index(data_x[index])] for index in range(len(puncts) - 1)]
indices = [i for i, w in enumerate(words1) if w in PUNCTUATIONS]
for i in indices:
    words1[i], words1[i-1] = words1[i-1], words1[i] 
words2 = [self._word_to_id.keys([self._word_to_id.values().index(data_x[index])] for index in range(len(puncts) - 1, len(data_x))]
all_words = words1 + [puncts[-1]] + words2  
content = ' '.join(all_words)  
min_step = len(puncts)

【问题讨论】:

  • 欢迎来到 SO!您能否提供一些可重现(包括所需的输出)代码以便我们测试解决方案?另请阅读minimal reproducible example
  • self._word_to_id.values().index(.... -> list(self._word_to_id.values()).index(.... 摆脱这个错误。但是在这里使用enumerate 会使代码更具可读性。另外,你确定是range(len(puncts) - 1 (-1)?
  • 试过了还是不行:'dict_keys' object does not support indexing

标签: python


【解决方案1】:

您正在调用 self._word_to_id.values(),它返回类 dict_values 而不是 listdict_values 不继承自 list 并且因此没有 index 方法。

您需要将字典值转换为list 才能使用index 函数。试试这个:

list(self._word_to_id.values()).index(data_x[index])

【讨论】:

  • 使用您的建议时会出现下一个错误:'dict_keys' 对象不支持索引。代码:[self._word_to_id.keys()[list(self._word_to_id.values()).index(data_x[index])] for index in range(len(puncts) - 1, len(data_x))]
  • @WolfgangPlato ,self._word_to_id.keys() 也是一个 dict_keys 对象。您需要通过list(self._word_to_id.keys()) 将其转换为列表,然后您才能对其进行索引。我也遇到过这个问题。
【解决方案2】:

words1 = [list(self._word_to_id.keys())[list(self._word_to_id.values()).index(data_x[index])] for index in range(len(puncts) - 1)]

【讨论】:

  • 感谢您提供此代码 sn-p,它可能会提供一些有限的短期帮助。一个正确的解释would greatly improve 其长期价值,通过展示为什么这是解决问题的好方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
猜你喜欢
  • 1970-01-01
  • 2023-01-23
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多