2012/9/21 Marco De Paoli <depao...@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
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python