2011-06-03 28 views

Respuesta

25

Debe ser

test = "I have one {fruit} on the {place}.".format(**dic) 

Nota del **. format() no acepta un solo diccionario, sino más bien argumentos de palabra clave.

+0

Gracias, funciona. ¿Puedes actualizar la respuesta para explicar por qué tengo que agregar '**' antes del diccionario? – bogdan

+2

@bogdan, el '**' indica que el diccionario debe expandirse a una lista de parámetros de palabra clave. El método 'format' no toma un diccionario como parámetro, pero sí tiene parámetros de palabra clave. –

+0

@bogdan: Agregué dos enlaces a mi respuesta. La razón básicamente es "porque la documentación lo dice". –

0

Se puede utilizar el siguiente código también:

dic = { 'fruit': 'apple', 'place':'table' } 
print "I have one %(fruit)s on the %(place)s." % dic 

Si quieres saber más sobre el método de formato de uso: http://docs.python.org/library/string.html#formatspec

+2

El operador '%' no se debe usar en un código nuevo de acuerdo con la documentación de Python. –

+0

¿Podría darme una referencia por lo que podré leer más sobre esto? –

+0

Con mucho gusto: http://docs.python.org/release/2.6.6/library/stdtypes.html#str.format –

6

Hay ''.format_map() function desde Python 3.2:

test = "I have one {fruit} on the {place}.".format_map(dic) 

El La ventaja es que acepta cualquier mapeo, por ejemplo, una clase con el método __getitem__ que genera valores dinámicamente o collections.defaultdict que una Te permite usar claves que no existen.

Puede ser emulado en versiones anteriores:

from string import Formatter 

test = Formatter().vformat("I have one {fruit} on the {place}.",(), dic) 
Cuestiones relacionadas