Python 3.6+使用缺少键从解压缩字典中格式化字符串

时间:2018-12-07 13:39:29

标签: python string python-3.x dictionary string-formatting

在Python3.4中,您可以执行以下操作:

class MyDict(dict):
    def __missing__(self, key):
        return "{%s}" % key

然后类似:

d = MyDict()
d['first_name'] = 'Richard'
print('I am {first_name} {last_name}'.format(**d))

按预期打印:

I am Richard {last_name}

但是此代码段在Python3.6 +中不起作用,在尝试从字典中获取KeyError值的同时返回last_name,是否有任何变通办法可以使字符串格式在与Python3.4一样吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

按照我的示例,我使用format_map而不是format解决了这个问题:

print('I am {first_name} {last_name}'.format_map(d))

已打印

I am Richard {last_name}

符合预期。

答案 1 :(得分:1)

在Python 3.6+中,您可以使用格式化的字符串文字(PEP 498):

class MyDict(dict):
    def __missing__(self, key):
        return f'{{{key}}}'

d = MyDict()
d['first_name'] = 'Richard'

print(f"I am {d['first_name']} {d['last_name']}")

# I am Richard {last_name}