Ответ 1
Должно быть
test = "I have one {fruit} on the {place}.".format(**dic)
Обратите внимание на **
. format()
не принимает ни одного словаря, а скорее аргументы ключевых слов.
Что не так в этом фрагменте кода?
dic = { 'fruit': 'apple', 'place':'table' }
test = "I have one {fruit} on the {place}.".format(dic)
print(test)
>>> KeyError: 'fruit'
Должно быть
test = "I have one {fruit} on the {place}.".format(**dic)
Обратите внимание на **
. format()
не принимает ни одного словаря, а скорее аргументы ключевых слов.
Существует функция ''.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)
Вы также можете использовать следующий код:
dic = { 'fruit': 'apple', 'place':'table' }
print "I have one %(fruit)s on the %(place)s." % dic
Если вы хотите узнать больше о методе формата, используйте: http://docs.python.org/library/string.html#formatspec