python – TypeError:’filter’对象不可下标

我收到错误

TypeError: 'filter' object is not subscriptable

当尝试运行以下代码块时

bonds_unique = {}
for bond in bonds_new:
    if bond[0] < 0:
        ghost_atom = -(bond[0]) - 1
        bond_index = 0
    elif bond[1] < 0:
        ghost_atom = -(bond[1]) - 1
        bond_index = 1
    else: 
        bonds_unique[repr(bond)] = bond
        continue
    if sheet[ghost_atom][1] > r_length or sheet[ghost_atom][1] < 0:
        ghost_x = sheet[ghost_atom][0]
        ghost_y = sheet[ghost_atom][1] % r_length
        image = filter(lambda i: abs(i[0] - ghost_x) < 1e-2 and
                       abs(i[1] - ghost_y) < 1e-2, sheet)
        bond[bond_index] = old_to_new[sheet.index(image[0]) + 1 ]
        bond.sort()
        #print >> stderr, ghost_atom +1, bond[bond_index], image
    bonds_unique[repr(bond)] = bond

# Removing duplicate bonds
bonds_unique = sorted(bonds_unique.values())

sheet_new = [] 
bonds_new = []
old_to_new = {}
sheet=[]
bonds=[] 

错误发生在行

bond[bond_index] = old_to_new[sheet.index(image[0]) + 1 ]

我很抱歉,这种类型的问题已经发布了很多次,但是我对Python来说是相当新鲜的,也不能完全理解字典.我试图用不应该使用字典的方式,还是应该使用我不使用字典的字典?
我知道修复可能非常简单(尽管不是我),如果有人能指出我正确的方向,我将非常感激.

再次,如果这个问题已经得到回答,我很抱歉

谢谢,

克里斯.

我在Windows 7 64位使用Python IDLE 3.3.1.

最佳答案
python 3中的filter()不返回一个列表,而是一个可迭代的过滤器对象.调用next()来获取第一个过滤的项目:

bond[bond_index] = old_to_new[sheet.index(next(image)) + 1 ]

没有必要将它转换为列表,因为您只使用第一个值.

转载注明原文:python – TypeError:’filter’对象不可下标 - 代码日志