尝试将字典放入列表时出现可订阅错误

时间:2014-05-04 17:38:27

标签: python

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

for i in range (0, len(self.codon_dict), 3): #in range from the first object to the last         object of the string, in multiples of three
            codon = (list(self.codon_dict.items[i:i+3])) #codons in string are read from      the first object (i) to another object three bases down the string 
            print (codon)
            if codon in NucParams.codon_dict():
                self.codon_dict[codon] +=1

我收到的错误是:

 codon = (list(self.codon_dict.items[i:i+3])) #codons in string are read from the first object (i) to another object three bases down the string
TypeError: 'builtin_function_or_method' object is not subscriptable

当他们说某个对象不可订阅时,他们的意思是什么?另外,我该如何设法修复此错误?感谢。

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

1 个答案:

答案 0 :(得分:1)

首先,您尝试下标方法(或函数)项,而不是函数的结果;您在()之后遗漏了括号self.codon_dict.items

其次,假设你像我一样习惯了Python 2,你可能会惊讶于dict.items()现在在字典项上返回一个'view';有关详情,请参阅this SO question

这里有一些简单的示例代码,展示了如何在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')]