Python String模板dict KeyError,如何设置默认值

时间:2014-12-19 07:49:35

标签: python dictionary stringtemplate

我想试试:

"%(name)s, %(age)s" % {"name":'Bob'}`

和控制台Bob, 20Bob,

但是,这会引起:

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'},但不要提高。

3 个答案:

答案 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')

See it working online

答案 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'