Python 我能用带函数的dict吗;格式";?

Python 我能用带函数的dict吗;格式";?,python,python-3.x,Python,Python 3.x,如果我有这个: >>> templ = "{aa} fd3443fds {bb} 543gfdgf {cc}" >>> d1 = {"aa": "this is aa", "bb": "this is bb33", "cc": "this is cc5222"} 用“d1”中的相应值替换temp中{}中的值的最简单方法是什么,最好使用String的函数“format”?如果您有一个模板字符串temp和一个字典d1,您可以这样填写模板变量: result =

如果我有这个:

>>> templ = "{aa} fd3443fds {bb} 543gfdgf {cc}"
>>> d1 = {"aa": "this is aa", "bb": "this is bb33", "cc": "this is cc5222"}

用“d1”中的相应值替换
temp
中{}中的值的最简单方法是什么,最好使用String的函数“format”?

如果您有一个模板字符串
temp
和一个字典
d1
,您可以这样填写模板变量:

result = templ.format(**d1)
如果您有一个具有属性
d1.aa
d1.bb
等的对象
d1

class Class1: pass
d1 = Class1()
d1.aa = d1.bb = d1.cc = 'hello'
然后您可以重写模板字符串:

templ = "{0.aa} fd3443fds {0.bb} 543gfdgf {0.cc}"
result = templ.format(d1)
或者您可以使用
vars(d1)


约塔,你是说
String
还是
str
?我不知道什么是
字符串
。如何对实例的属性执行该操作?换句话说,如果d1是某个类别1的实例,并且它具有属性“aa”、“bb”和“cc”。按原样传递会引发异常。@Joota-尝试使用
.format(**vars(d1))
。请参阅我最近的edit.FYI,在现代Python中,
result=temp.format(**d1)
可以用来支持任意非
dict
对象,只要它们通过执行
result=temp.format\u map(d1)
来支持映射协议。在某一点上,这对于
dict
子类也是必要的,但至少在3.5中不是这样的(
'{a},{b}',format(**defaultdict(lambda:'foo'))
生成
'foo,foo'
,而不是出错,表明
defaultdict
状态没有丢失)。
templ = "{aa} fd3443fds {bb} 543gfdgf {cc}"
result = templ.format(**vars(d1))