python:格式字符串中变量名称中的点

问题描述 投票:0回答:4

假设我有一本字典,字段名称中带有点,例如

{'person.name': 'Joe'}
。如果我想在
str.format
中使用这个,可以吗?

我的第一直觉是

'Name: {person.name}'.format(**{'person.name': 'Joe'})

但这只有在我的字典形状像这样的情况下才有效

{'person':{'name':Joe}}

相关手册文档部分没有提到转义点。

(旁注:我认为一般来说

def func(**kw): print(kw)
func(**{'a.b': 'Joe'})

会导致错误,但

**
扩展的函数调用似乎可以工作,即使它们是不是有效的标识符!不过,它在非字符串上确实会出错。 o_O)

python string-formatting
4个回答
8
投票


5
投票
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!'



4
投票
%

格式(尚未弃用):


>>> print 'Name: %(person.name)s' % {'person.name': 'Joe'} Name: Joe



0
投票
f-strings

干净地处理这个问题: >>> x = {'person.name': 'Joe'} >>> print(f"Name: {x['person.name']}") Name: Joe

© www.soinside.com 2019 - 2024. All rights reserved.