2011-12-15 13 views

Respuesta

58

pasar por el dict.items() iterador que dará lugar a una clave, valor tupla:

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

Esta es la solución más Pythonic que he visto. Increíble. –

4

Eso, o una solución aún más fresco usando join para unirse a ambos elementos y los (clave, valor) pares, evitando la ahora obsoleta % interpolación, utilizando sólo una única variable ficticia _, y dejando caer la lista redundante comprensión:

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

Tenga en cuenta que no tienen dicts pedidos, así que sin sorted() puede que no obtenga lo que quiere:

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

Esto también funciona solamente cuando todas las claves y los valores son cadenas, de lo contrario join se quejan. Una solución más robusta sería:

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

ahora funciona muy bien, incluso para las claves y los valores de tipos mixtos:

>>> 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' 

Por supuesto, para los tipos mixtos una llanura sorted() no funcionará como se espera. Úselo solo si sabe que todas las teclas son cadenas (o todas numéricas, etc.). En el primer caso, se puede eliminar la primera str() también:

>>> 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

Me gustó lo Filip Dupanović hizo anteriormente. Modifiqué esto para que sea python3-ish usando el método str.format.

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

Modifiqué lo anterior para generar una cadena que podría alimentar a una declaración de SQL table create.

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

Requiere edición. –

Cuestiones relacionadas