Как использовать str.format () со словарем в Python? - PullRequest
15 голосов
/ 03 июня 2011

Что не так в этом куске кода?

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

>>> KeyError: 'fruit'

Ответы [ 3 ]

29 голосов
/ 03 июня 2011

Должно быть

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

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

7 голосов
/ 23 октября 2012

Существует ''.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)
0 голосов
/ 03 июня 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...