<div class="gmail_quote">2012/9/21 Marco De Paoli <span dir="ltr"><<a href="mailto:depaolim@gmail.com" target="_blank">depaolim@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
ciao a tutti,<br>ho le seguenti liste:<br>base = [(1, 100), (1, 200), (3, 100)]<br>categories = [1, 2, 3]<br><br>e vorrei ottenere il seguente dizionario:<br>result = {1: [100, 200], 2: [], 3: [100]}<br><br>In pratica ogni chiave in categories è presente in result eventualmente con valore lista vuota.<br>
<br>Ho pensato alla seguente soluzione:<br>result = {}<br>[result.setdefault(k, []).append(v) for k, v in base]<br>[result.setdefault(k, []) for k in categories if not k in result]<br><br>C'è però la terza riga che non mi piace perché leggo result *mentre* lo sto modificando, per cui l'ho sostituita con:<br>
[result.setdefault(k, []) for k in categories if not k in dict(base).keys()]<br><br>Domande:<br>1) ha senso lo scrupolo di non leggere result mentre lo modifico?<br>2) ... c'è qualcosa di più pythonico?<br></blockquote>
<div><br></div><div>A me piace di più così:</div><div><br></div><div><div>result = dict((c, []) for c in categories)</div><div>for k, v in base:</div><div> result[k].append(v)</div></div><div><br></div><div>La list comprehension usata per risparmiare il for non mi gusta troppo...</div>
<div>Ciao.</div><div>Marco.</div><div><br></div></div>-- <br><div><div><div><div><a href="http://beri.it/" target="_blank">http://beri.it/</a> - Un blog</div><div><a href="http://beri.it/i-miei-libri/" target="_blank">http://beri.it/i-miei-libri/</a> - Qualche libro</div>
<div><br></div></div></div></div><br>