带可选dict key valu的字符串格式

2024-05-13 10:02:21 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法用dict格式化字符串,但可以选择不出现键错误?

这很管用:

opening_line = '%(greetings)s  %(name)s !!!'
opening_line % {'greetings': 'hello', 'name': 'john'}

但假设我不知道名字,我想在第行的上方格式化 仅适用于'greetings'。有点像

 opening_line % {'greetings': 'hello'}

即使出现以下情况,输出也可以:

'hii %(name)s !!!'  # keeping name un-formatted 

但这会在解包时KeyError

有什么办法吗?


Tags: 字符串namehello错误line情况keeping名字
3条回答

有些人选择了defaultDict

greeting_dict = {'greetings': 'hello'}

if 'name' in greeting_dict :
    opening_line = '{greetings} {name}'.format(**greeting_dict)
else:
    opening_line = '{greetings}'.format(**greeting_dict)

print opening_line

也许更简洁的是,使用dictionary get设置每个参数的默认值

'{greetings} {name}'.format(greetings=greeting_dict.get('greetings','hi'),
                            name=greeting_dict.get('name',''))

使用defaultdict,这将允许您为字典中不存在的键指定默认值。例如:

>>> from collections import defaultdict
>>> d = defaultdict(lambda: 'UNKNOWN')
>>> d.update({'greetings': 'hello'})
>>> '%(greetings)s  %(name)s !!!' % d
'hello  UNKNOWN !!!'
>>> 

记录在案:

info = {
    'greetings':'DEFAULT',
    'name':'DEFAULT',
    }
opening_line = '{greetings} {name} !!!'

info['greetings'] = 'Hii'
print opening_line.format(**info)
# Hii DEFAULT !!!

相关问题 更多 >