尝试将字典转换为列表时出现可对下标访问的错误。

6 浏览
0 Comments

尝试将字典转换为列表时出现可对下标访问的错误。

在我正在处理的代码中,当我尝试将一个字典转换为列表,并将该列表拆分为三个字母的RNA密码子时,我收到了一个错误消息。这是我输入的内容:

for i in range(0, len(self.codon_dict), 3): #从字符串的第一个对象到最后一个对象,以三倍数的形式
            codon = (list(self.codon_dict.items[i:i+3])) #从字符串的第一个对象(i)读取密码子,到字符串中距离三个碱基的另一个对象
            print(codon)
            if codon in NucParams.codon_dict():
                self.codon_dict[codon] += 1

我收到的错误是:

codon = (list(self.codon_dict.items[i:i+3])) #从字符串的第一个对象(i)读取密码子,到字符串中距离三个碱基的另一个对象
TypeError: 'builtin_function_or_method' object is not subscriptable

当他们说一个对象不可索引时,他们是什么意思?另外,我该如何修复这个错误?谢谢。

注意:NucParams是我的类,而codon_dict是一个列出编码氨基酸的三个字母密码子的字典。

0
0 Comments

在这段代码中,出现了一个错误,即在将字典转换为列表时出现了“subscriptable error”。这个错误的原因有两个:

首先,代码中尝试对方法(或函数)items进行下标操作,而不是对函数的结果进行下标操作。在self.codon_dict.items后面缺少圆括号()。

其次,假设你像我一样习惯于Python 2,你可能会对dict.items()现在返回的是字典项的“视图”感到惊讶。你可以参考这个SO问题了解更多信息。

下面是一些简单的示例代码,展示了如何在Python 3中使用dict.items():

import itertools

d={'foo':'bar',

'baz':'quuz',

'fluml':'sqoob'}

print(list(d.items())[0:2])

print(list(itertools.islice(d.items(),0,2)))

运行此代码将输出:

[('foo', 'bar'), ('baz', 'quuz')]

[('foo', 'bar'), ('baz', 'quuz')]

解决这个问题的方法是在self.codon_dict.items后面添加圆括号,将其转换为self.codon_dict.items()。这样就可以通过对函数结果进行下标操作来创建一个列表,而不是对函数本身进行下标操作。

0