python - instalar - TypeError: el objeto ''filtro'' no es suscriptable
python msi (3)
Use la list
antes del filter
entonces funciona bien. Para mi se resolvió el problema.
Por ejemplo
list(filter(lambda x: x%2!=0, mylist))
en lugar de
filter(lambda x: x%2!=0, mylist)
Estoy recibiendo el error
TypeError: ''filter'' object is not subscriptable
Al intentar ejecutar el siguiente bloque de código
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())
Y
sheet_new = []
bonds_new = []
old_to_new = {}
sheet=[]
bonds=[]
El error se produce en la línea.
bond[bond_index] = old_to_new[sheet.index(image[0]) + 1 ]
Pido disculpas por el hecho de que este tipo de pregunta se haya publicado TAN muchas veces, pero soy bastante nuevo en Python y no entiendo completamente los diccionarios. ¿Estoy tratando de usar un diccionario de una manera en que no debería usarse, o debería estar usando un diccionario donde no lo estoy usando? Sé que la solución es probablemente muy simple (aunque no para mí), y le estaré muy agradecido si alguien me pudiera orientar en la dirección correcta.
Una vez más, me disculpo si esta pregunta ya ha sido respondida
Gracias,
Chris
Estoy usando Python IDLE 3.3.1 en Windows 7 de 64 bits.
filter()
en python 3 no devuelve una lista, sino un objeto de filter
iterable. Llame a next()
para obtener el primer elemento filtrado:
bond[bond_index] = old_to_new[sheet.index(next(image)) + 1 ]
No hay necesidad de convertirlo en una lista, ya que solo usa el primer valor.
image = list(filter(lambda i: abs(i[0] - ghost_x) < 1e-2 and abs(i[1] - ghost_y) < 1e-2, sheet))