Reputation: 9456
What is wrong with this piece of code?
dic = { 'fruit': 'apple', 'place':'table' }
test = "I have one {fruit} on the {place}.".format(dic)
print(test)
>>> KeyError: 'fruit'
Upvotes: 23
Views: 22788
Reputation: 414159
There is ''.format_map()
function since Python 3.2:
test = "I have one {fruit} on the {place}.".format_map(dic)
The advantage is that it accepts any mapping e.g., a class with __getitem__
method that generates values dynamically or collections.defaultdict
that allows you to use non-existent keys.
It can be emulated on older versions:
from string import Formatter
test = Formatter().vformat("I have one {fruit} on the {place}.", (), dic)
Upvotes: 11
Reputation: 601529
Should be
test = "I have one {fruit} on the {place}.".format(**dic)
Note the **
. format()
does not accept a single dictionary, but rather keyword arguments.
Upvotes: 43
Reputation: 29093
You can use the following code too:
dic = { 'fruit': 'apple', 'place':'table' }
print "I have one %(fruit)s on the %(place)s." % dic
If you want to know more about format method use: http://docs.python.org/library/string.html#formatspec
Upvotes: 1