python: точки в имени переменной в строке формата
скажем, у меня есть словарь с точками в названии полей, например {'person.name': 'Joe'}
. Если бы я хотел использовать это в str.format
, это возможно?
моим первым побуждением было
'Name: {person.name}'.format(**{'person.name': 'Joe'})
но это будет работать только в том случае, если мой дикт будет иметь форму
{'person':{'name':Joe}}
соответствующий раздел руководства docs в любом случае не упоминает о побеге от точки.
(Sidenote: я думал, что вообще
def func(**kw): print(kw)
func(**{'a.b': 'Joe'})
вызовет ошибку, но **
-расширенный вызов функции, похоже, работает, даже если они не допустимыми идентификаторами! Это тут ошибка на не-строках, хотя. О_о)
3 ответов
один из способов обойти это, чтобы использовать старый %
форматирование (которое еще не устарело):
>>> print 'Name: %(person.name)s' % {'person.name': 'Joe'}
Name: Joe
у меня была аналогичная проблема, и я решил ее, унаследовав от string.Formatter
:
import string
class MyFormatter(string.Formatter):
def get_field(self, field_name, args, kwargs):
return (self.get_value(field_name, args, kwargs), field_name)
вы не можете использовать str.format()
потому что он все еще указывает на старый форматтер, и вам нужно пойти так
>>> MyFormatter().vformat("{a.b}", [], {'a.b': 'Success!'})
'Success!'