Dì max()
come calcolare il massimo per una sequenza di indici:
max(xrange(len(ld)), key=lambda index: ld[index]['size'])
Questa tornerà l'indice per il quale la chiave size
è il più alto:
>>> ld = [{'prop': 'foo', 'size': 100}, {'prop': 'boo', 'size': 200}]
>>> max(xrange(len(ld)), key=lambda index: ld[index]['size'])
1
>>> ld[1]
{'size': 200, 'prop': 'boo'}
Se si voleva che dizionario da sempre, quindi è sufficiente utilizzare:
max(ld, key=lambda d: d['size'])
e per ottenere sia l'indice e il dizionario, è possibile utilizzare enumerate()
qui:
max(enumerate(ld), key=lambda item: item[1]['size'])
Alcuni più provare le canzoni:
>>> max(ld, key=lambda d: d['size'])
{'size': 200, 'prop': 'boo'}
>>> max(enumerate(ld), key=lambda item: item[1]['size'])
(1, {'size': 200, 'prop': 'boo'})
La funzione key
è passato ogni elemento della sequenza di input, a sua volta e max()
sceglierà l'elemento in cui il valore restituito della funzione key
è più alto.
Utilizzare un elenco separato per estrarre tutti i valori size
, quindi mappare nuovamente l'elenco originale non è molto efficiente (è necessario ripetere l'elenco due volte). list.index()
non può funzionare in quanto deve corrispondere all'intero dizionario, non solo un valore in esso.
Grazie per si risponde, ho aggiunto alcuni contenuti, che cosa ne pensi? Ho bisogno di una soluzione più semplice. Il tuo è fantastico ma più facile da capire sarebbe bello! – Kvash
Sto imparando molto dalla tua risposta. Grazie per questo. – Kvash