¿Qué hay de malo en este fragmento de código?Cómo usar str.format() con un diccionario en python?
dic = { 'fruit': 'apple', 'place':'table' }
test = "I have one {fruit} on the {place}.".format(dic)
print(test)
>>> KeyError: 'fruit'
¿Qué hay de malo en este fragmento de código?Cómo usar str.format() con un diccionario en python?
dic = { 'fruit': 'apple', 'place':'table' }
test = "I have one {fruit} on the {place}.".format(dic)
print(test)
>>> KeyError: 'fruit'
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
El operador '%' no se debe usar en un código nuevo de acuerdo con la documentación de Python. –
¿Podría darme una referencia por lo que podré leer más sobre esto? –
Con mucho gusto: http://docs.python.org/release/2.6.6/library/stdtypes.html#str.format –
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)
Gracias, funciona. ¿Puedes actualizar la respuesta para explicar por qué tengo que agregar '**' antes del diccionario? – bogdan
@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. –
@bogdan: Agregué dos enlaces a mi respuesta. La razón básicamente es "porque la documentación lo dice". –