我想试试:
"%(name)s, %(age)s" % {"name":'Bob'}`
和控制台Bob, 20
或Bob,
。
但是,这会引起:
Traceback (most recent call last):`
File "<pyshell#4>", line 1, in <module>`
"%(name)s, %(age)s" % {"name":'a'}`
KeyError: 'age'`
如何设置默认值?
事实上,当我输入Bob,
时,我希望得到"%(name)s, %(age)s" % {"name":'Bob'}
,但不要提高。
答案 0 :(得分:1)
您可以通过这种方式继承dict
:
class Default(dict):
def __init__(self, default, *args, **kwargs):
self.default = default
dict.__init__(self, *args, **kwargs)
def __missing__(self, key):
return self.default
#用法:
print "%(name)s, %(age)s" % Default('', {"name":'Bob'})
print "%(name)s, %(age)s" % Default('', name='Bob')
上面两行都打印Bob,
See it working online
See version of this code written in Python 3 working online
我重新邀请collections.defaultdict
。
from collections import defaultdict
print "%(name)s, %(age)s" % defaultdict(lambda: '', {"name":'Bob'})
print "%(name)s, %(age)s" % defaultdict(lambda: '', name='Bob')
答案 1 :(得分:0)
您使用ages
作为键,而键变量是age
。因此你必须把它写成
"%(name)s, hello. %(age)s" % {"name":'a', "age":"15"}
这将打印
'a, hello. 15'
答案 2 :(得分:0)
"%(name)s, %(age)s" % {"name":'Bob'}
您没有在词典中定义任何'age'
键。
In [10]: _dict = {"name":'Bob', 'age': 20}
In [11]: "%(name)s, %(age)s" %_dict
或者使用string
格式总是更好。 see the documentation它更加pythonic。
In [5]: "{name}s, {age}s".format(name='Bob', age=20)
Out[5]: 'Bobs, 20s'
jamylak 建议,
In [17]: "{name}s, {age}s".format(**_dict)
Out[17]: 'Bobs, 20s'