2011-12-15 14 views

risposta

58

Go attraverso il dict.items() iteratore che produrrà una chiave, valore tupla:

'<br/>'.join(['%s:: %s' % (key, value) for (key, value) in d.items()]) 
+1

Questa è la soluzione più divinatorio che ho visto. Eccezionale. –

4

Che, o una soluzione ancora più interessante utilizzando join aderire entrambi gli elementi e i (, valore chiave) coppie, evitando l'ormai obsoleta % interpolazione, utilizzando solo una singola variabile dummy _, e far cadere la lista ridondante di comprensione:

"<br/>".join(":: ".join(_) for _ in mydict.items()) 

essere consapevoli del fatto che non hanno dicts ordinamento, quindi senza sorted() si potrebbe non ottenere quello che vuoi:

>>> mydict = dict(a="A", b="B", c="C") 
>>> ", ".join("=".join(_) for _ in mydict.items()) 
'a=A, c=C, b=B' 

Anche questo funziona solo quando tutte le chiavi e valori sono stringhe, altrimenti join si lamentano. Una soluzione più robusta sarebbe:

", ".join("=".join((str(k),str(v))) for k,v in mydict.items()) 

Ora funziona benissimo, anche per le chiavi e valori di tipo misto:

>>> mydict = {'1':1, 2:'2', 3:3} 
>>> ", ".join("=".join((str(k),str(v))) for k,v in mydict.items()) 
'2=2, 3=3, 1=1' 

Naturalmente, per i tipi misti una pianura sorted() non funziona come previsto. Usalo solo se sai che tutte le chiavi sono stringhe (o tutte numeriche, ecc.). Nel primo caso, è possibile eliminare la prima str() troppo:

>>> mydict = dict(a=1, b=2, c=2) 
>>> ", ".join("=".join((k,str(v))) for k,v in sorted(mydict.items())) 
'a=1, b=2, c=3' 
1

mi è piaciuto quello Filip Dupanović ha fatto in precedenza. Ho modificato questo per essere python3-ish usando il metodo str.format.

'<br/>'.join(['{0}:: {1}'.format(key, value) for (key, value) in d.items()]) 

Ho modificato il precedente per generare una stringa che potrei alimentare a un'istruzione di creazione di una tabella SQL.

fieldpairs = ','.join(['{0} {1}'.format(key, value) for (key, value) in HiveTypes.items()]) 
+0

richiede la modifica. –

Problemi correlati