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

Marco Beri marcoberi a gmail.com
Ven 21 Set 2012 15:33:08 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]}
>
> 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?
>

A me piace di più così:

result = dict((c, []) for c in categories)
for k, v in base:
    result[k].append(v)

La list comprehension usata per risparmiare il for non mi gusta troppo...
Ciao.
Marco.

-- 
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20120921/2e4103d8/attachment.html>


Maggiori informazioni sulla lista Python