2013-07-25 15 views
7

Ho una lista di dizionari. Ogni dizionario ha una chiave intera e un valore di tupla. Vorrei sommare tutti gli elementi situati in una certa posizione della tupla.Python Elenco dei dizionari [int: tupla] Somma

Esempio:

myList = [{1000:("a",10)},{1001:("b",20)},{1003:("c",30)},{1000:("d",40)}] 

So che avrei potuto fare qualcosa di simile:

sum = 0 
for i in myList: 
    for i in myList: 
     temp = i.keys() 
     sum += i[temp[0]][1] 
print sum 

C'è un modo più divinatorio di fare questo? Grazie

+2

regola generale empirica: se si sta utilizzando direttamente un ciclo c'è un modo più divinatorio di fare le cose. –

+5

@SlaterTyranus: Non direi che ci sono molti usi pitonici per il ciclo 'for'. –

+1

@MartijnPieters Sono certo che esistano, ma credo che il 90% di tutti i loop multi-line for siano indicatori di codice che devono essere refactored. Per chiarire: utilizzando direttamente un ciclo for intendo non usare la sintassi in linea. –

risposta

7

utilizzare un'espressione generatore annodare su tutti i dizionari poi i loro valori:

sum(v[1] for d in myList for v in d.itervalues()) 

Per Python 3, sostituiamo d.itervalues() con d.values().

Demo:

>>> sum(v[1] for d in myList for v in d.itervalues()) 
100 
0
import itertools 
sum((v[1][1] for v in itertools.chain(*[d.items() for d in myList]))) 

itertools può "catena" insieme a diverse liste ci sono logicamente uno.

0

Non so se questo è un modo più divinatorio:

print sum([i[i.keys()[0]][1] for i in myList]) 
Problemi correlati