为了账号安全,请及时绑定邮箱和手机立即绑定

如何在python-3.x中使用字典格式化字符串?

如何在python-3.x中使用字典格式化字符串?

吃鸡游戏 2019-11-25 16:01:33
我非常喜欢使用字典来格式化字符串。它可以帮助我阅读所使用的字符串格式,也可以利用现有的字典。例如:class MyClass:    def __init__(self):        self.title = 'Title'a = MyClass()print 'The title is %(title)s' % a.__dict__path = '/path/to/a/file'print 'You put your file here: %(path)s' % locals()但是我无法弄清楚python 3.x语法是否可以这样做(或者甚至可以)。我想做以下# Fails, KeyError 'latitude'geopoint = {'latitude':41.123,'longitude':71.091}print '{latitude} {longitude}'.format(geopoint)# Succeedsprint '{latitude} {longitude}'.format(latitude=41.123,longitude=71.091)
查看完整描述

3 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

由于该问题特定于Python 3,因此这里使用了新的f字符串语法:


>>> geopoint = {'latitude':41.123,'longitude':71.091}

>>> print(f'{geopoint["latitude"]} {geopoint["longitude"]}')

41.123 71.091

注意外部单引号和内部双引号(您也可以采用其他方法)。


查看完整回答
反对 回复 2019-11-25
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

这对你有好处吗?


geopoint = {'latitude':41.123,'longitude':71.091}

print('{latitude} {longitude}'.format(**geopoint))


查看完整回答
反对 回复 2019-11-25
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

由于Python 3.0和3.1已停产,并且没有人使用它们,因此您可以并且应该使用str.format_map(mapping)(Python 3.2+):


与相似str.format(**mapping),除了直接使用映射而不将其复制到dict。例如,如果映射是dict子类,则这很有用。


这意味着您可以使用例如defaultdict为丢失的键设置(并返回)默认值的a:


>>> from collections import defaultdict

>>> vals = defaultdict(lambda: '<unset>', {'bar': 'baz'})

>>> 'foo is {foo} and bar is {bar}'.format_map(vals)

'foo is <unset> and bar is baz'

即使提供的映射是dict,而不是子类,也可能会稍快一些。


鉴于给定,差异并不大


>>> d = dict(foo='x', bar='y', baz='z')

然后


>>> 'foo is {foo}, bar is {bar} and baz is {baz}'.format_map(d)

大约比10 ns(2%)快


>>> 'foo is {foo}, bar is {bar} and baz is {baz}'.format(**d)

在我的Python 3.4.3上。当字典中有更多键时,差异可能会更大,并且


注意,格式语言比它灵活得多。它们可以包含索引表达式,属性访问等,因此您可以格式化整个对象或其中两个:


>>> p1 = {'latitude':41.123,'longitude':71.091}

>>> p2 = {'latitude':56.456,'longitude':23.456}

>>> '{0[latitude]} {0[longitude]} - {1[latitude]} {1[longitude]}'.format(p1, p2)

'41.123 71.091 - 56.456 23.456'

从3.6开始,您也可以使用插值字符串:


>>> f'lat:{p1["latitude"]} lng:{p1["longitude"]}'

'lat:41.123 lng:71.091'

您只需要记住在嵌套引号中使用其他引号字符。这种方法的另一个好处是,它比调用格式化方法要快得多。


查看完整回答
反对 回复 2019-11-25
  • 3 回答
  • 0 关注
  • 676 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信