How to use str.format() with a dictionary in Python?

Question:

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'
Asked By: bogdan

||

Answers:

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.

Answered By: Sven Marnach

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

Answered By: Artsiom Rudzenka

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)
Answered By: jfs
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.