[Python] da lista di coppie a dict con lista di valori

Stefano Dal Pra s.dalpra a gmail.com
Mer 26 Set 2012 17:37:50 CEST


2012/9/21 Marco De Paoli <depaolim a gmail.com>:
> ciao a tutti,
> ho le seguenti liste:
> base = [(1, 100), (1, 200), (3, 100)]
> categories = [1, 2, 3]
>
> e vorrei ottenere il seguente dizionario:
> result = {1: [100, 200], 2: [], 3: [100]}

Un altro modo puo' essere:

>>> base = [(1, 100), (1, 200), (3, 100)]
>>> categories = [1, 2, 3]
>>> d = {}
>>> x = [d.setdefault(x[0],[]).append(x[1]) for x in base] + [ d.setdefault(n,[]) for n in categories ]
>>> d
{1: [100, 200], 2: [], 3: [100]}


Stefano

>
> In pratica ogni chiave in categories è presente in result eventualmente con
> valore lista vuota.
>
> Ho pensato alla seguente soluzione:
> result = {}
> [result.setdefault(k, []).append(v) for k, v in base]
> [result.setdefault(k, []) for k in categories if not k in result]
>
> C'è però la terza riga che non mi piace perché leggo result *mentre* lo sto
> modificando, per cui l'ho sostituita con:
> [result.setdefault(k, []) for k in categories if not k in dict(base).keys()]
>
> Domande:
> 1) ha senso lo scrupolo di non leggere result mentre lo modifico?
> 2) ... c'è qualcosa di più pythonico?
>
> grazie,
> Marco
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>


Maggiori informazioni sulla lista Python