sto ricevendo l'erroreTypeError: 'filtro' oggetto non viene subscriptable
TypeError: 'filter' object is not subscriptable
Quando si tenta di eseguire il seguente blocco di codice
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())
E
sheet_new = []
bonds_new = []
old_to_new = {}
sheet=[]
bonds=[]
L'errore si verifica alla linea
bond[bond_index] = old_to_new[sheet.index(image[0]) + 1 ]
Mi scuso per il fatto che questo tipo di domanda è stato pubblicato su SO molte volte, ma sono abbastanza nuovo per Python e non capisco perfettamente i dizionari. Sto cercando di usare un dizionario in un modo in cui non dovrebbe essere usato, o dovrei usare un dizionario dove non lo sto usando? So che la correzione è probabilmente molto semplice (anche se non per me) e sarò molto grato se qualcuno mi indicasse la giusta direzione.
Ancora una volta, mi scuso se questa domanda è stato risposto già
Grazie,
Chris.
Sto usando Python IDLE 3.3.1 su Windows 7 a 64 bit.
così frustrante da ricordare quando questo linguaggio è OO e quando è procedurale - perché no 'iterable.next()' invece di 'prossimo (iterable) '? – Basic
@Basic: '.next()' è il metodo di aggancio, 'next()' l'API di stdlib. Come 'len()' vs. '.__ len __()', 'str()' vs. '.__ str __()', ecc. In Python 3 il metodo '.next()' è stato rinominato '.__ next __() '; è stato un errore non dargli un nome di metodo speciale. 'next()' (la funzione) consente anche di specificare un valore predefinito da restituire se viene visualizzato 'StopIteration'. –