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]}
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@lists.python.it > http://lists.python.it/mailman/listinfo/python > _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python