2013-07-23 13 views
9

Ecco il mio codice:Converti generatore oggetto a un dizionario

# library to extract cookies in a http message 
cj = cookielib.CookieJar() 

... do connect to httpserver etc 

cdict = ((c.name,c.value) for c in cj) 

Il problema con questo codice è cdict è un generatore. Ma voglio semplicemente creare un dizionario. Come posso modificare l'ultima riga da assegnare a un dizionario?

risposta

11

Utilizzare una comprensione del dizionario. (Introdotto in Python 2,7)

cdict = {c.name:c.value for c in cj}

Per esempio,

>>> {i:i*2 for i in range(10)} 
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18} 

Ecco la PEP che ha introdotto Dizionario Comprensioni. Potrebbe essere utile.

Se si utilizza qualcosa sotto Python 2.7. - Crea un elenco di coppie di valori chiave e chiama dict() su di esse, qualcosa di simile.

>>> keyValList = [(i, i*2) for i in range(10)] 
>>> keyValList 
[(0, 0), (1, 2), (2, 4), (3, 6), (4, 8), (5, 10), (6, 12), (7, 14), (8, 16), (9, 18)] 
>>> dict(keyValList) 
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18} 

O semplicemente passare il generatore al metodo dict(). Qualcosa di simile

>>> dict((i, i*2) for i in range(10)) 
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18} 
0

È possibile utilizzare questo:

cdict = {c.name:c.value for c in cj}