Как использовать str.format() со словарем в python?

Что не так в этом фрагменте кода?

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

>>> KeyError: 'fruit'

Ответы

Ответ 1

Должно быть

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

Обратите внимание на **. format() не принимает ни одного словаря, а скорее аргументы ключевых слов.

Ответ 2

Существует функция ''.format_map(), поскольку Python 3.2:

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

Преимущество заключается в том, что оно принимает любое сопоставление, например, класс с методом __getitem__, который генерирует значения динамически или collections.defaultdict, что позволяет использовать несуществующие ключи.

Его можно эмулировать в более старых версиях:

from string import Formatter

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

Ответ 3

Вы также можете использовать следующий код:

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

Если вы хотите узнать больше о методе формата, используйте: http://docs.python.org/library/string.html#formatspec