[Python] Lista dizionari

Daniele Varrazzo piro a develer.com
Ven 15 Giu 2012 13:29:09 CEST


On Fri, 15 Jun 2012 11:39:13 +0100 (BST), Walter Valenti wrote:
> Correzione dalla mail precedente senza titolo:
>
>
>
> Ho il seguente problema:
>
> una lista dizionari siffati:
> tabella{path,cfile}
> Nella lista il valore della chiave "path" può essere ripetuto n 
> volte.
> Come faccio a tirate fuori nella maniera più efficiente possibile
> (!!!) tutte  le
> coppie <path,cfile>
> per un dato valore della chiave di path ?

Come ti hanno detto in molti, puoi avere solo chiavi singole in un 
dizionario. Ma puoi avere valori multipli se li metti in una lista. Il 
modo più idiomatico credo sia questo:


     In [1]: from collections import defaultdict

     In [4]: d = defaultdict(list)

     In [5]: d['foo'].append(10)

     In [6]: d['foo'].append(20)

     In [7]: d['bar'].append(30)

     In [8]: d
     Out[8]: defaultdict(<type 'list'>, {'foo': [10, 20], 'bar': [30]})

Puoi iterare facilmente su chiavi e valori:

     In [10]: for k, v in d.iteritems():
         for x in v:
             print k, x
        ....:
        ....:
     foo 10
     foo 20
     bar 30

Puoi tirare fuori tutti i valori per una chiave ripetuta:

     In [9]: d['foo']
     Out[9]: [10, 20]

O solo il primo se sei assumi ce ne sia solo uno:

     In [10]: d['bar'][0]
     Out[10]: 30


-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com


Maggiori informazioni sulla lista Python