2013-05-31 8 views
10

Python 3.3, un dizionario con coppie chiave-valore in questo modulo.Python conta elementi in valore dict che è un elenco

d = {'T1': ['eggs', 'bacon', 'sausage']} 

I valori sono elenchi di lunghezza variabile e ho bisogno di scorrere le voci dell'elenco. Questo funziona:

count = 0 
for l in d.values(): 
    for i in l: count += 1 

Ma è brutto. Ci deve essere un modo più pitonico, ma non riesco a trovarlo.

len(d.values()) 

produce 1. È 1 elenco (DUH). Tentativi con contatore da here danno errori di tipo "non selezionabili".

risposta

35

Usa sum() e le lunghezze di ciascuno dei valori del dizionario:

count = sum(len(v) for v in d.itervalues()) 

Se si sta utilizzando Python 3, poi basta usare d.values().

demo rapido con il campione di ingresso e uno dei miei:

>>> d = {'T1': ['eggs', 'bacon', 'sausage']} 
>>> sum(len(v) for v in d.itervalues()) 
3 
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']} 
>>> sum(len(v) for v in d.itervalues()) 
7 

Un Counter non vi aiuterà molto qui, non si sta creando un conteggio per ogni voce, si sta calcolando la lunghezza totale di tutte le valori.

+0

Grazie! Molto utile, come al solito :) – RolfBly

7
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']} 
>>> sum(map(len, d.values())) 
7 
0

Stavo cercando una risposta a questo quando ho trovato questo argomento fino a quando ho capito che avevo già qualcosa nel mio codice per utilizzare questo per. Questo è ciò che mi si avvicinò con:

count = 0 

for key, values in dictionary.items(): 
     count = len(values) 

Se si desidera salvare il conteggio per ogni voce del dizionario è possibile creare un nuovo dizionario per salvare il conteggio per ogni tasto.

count = {} 

for key, values in dictionary.items(): 
     count[key] = len(values) 

non riuscivo a trovare esattamente da quale versione di questo metodo è disponibile, ma credo che il metodo .items è disponibile solo in Python 3.

0

a fare i compiti su Treehouse sono arrivato fino a questo. Può essere reso più semplice da almeno un passo (che io sappia), ma potrebbe essere più facile per i principianti (come me) ad aggiungere questa versione.

dict = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['bread', 'butter', 'tosti']} 

total = 0 

for value in dict: 
    value_list = dict[value] 
    count = len(value_list) 
    total += count 

print(total)