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

使用 str.format() 和字典

使用 str.format() 和字典

30秒到达战场 2022-05-24 09:24:58
为什么会这样:data = {'first': 'Hodor', 'last': 'Hodor!'}print('{first} {last}'.format(**data))这有效:bdays = {    'Wesley Neill': 'January 6, 1985',    'Victoria Neill': 'August 25, 1992',    'Heather Neill': 'June 25, 1964'}print('\n {} \n {} \n {}'.format(*bdays))但这不起作用: print('\n {} \n {} \n {}'.format(**bdays))Traceback (most recent call last):  File "C:/Users/wesle/PycharmProjects/practicepython/birthdays.py", line 9, in <module>    print('We have the following names in our dictionary: \n {} \n {} \n {} \n'.format(**bdays))IndexError: tuple index out of range第一个示例在占位符大括号中包含字典键,并在参数中使用 **kwargs。第二个没有键,在 .format() 参数中只有一个星号。第三个在占位符中没有键,如示例 1 所示,但它确实在参数中使用了 **kwargs。我知道我需要做些什么才能使事情正常进行,但我对这里的微妙之处感到好奇。
查看完整描述

2 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

.format(**bdays)相当于.format(key1=value, key2=value2,...)键是名称,值是生日。


因此,要使其发挥作用,您的打印声明需要成为 -


print('\n {Wesley Neill} \n {Victoria Neill} \n {Heather Neill}'.format(**bdays))

这将打印这 3 个人的生日。


在您的 python 控制台中尝试以下操作 -


>>> [*bdays]

['Wesley Neill', 'Victoria Neill', 'Heather Neill']


查看完整回答
反对 回复 2022-05-24
?
精慕HU

TA贡献1845条经验 获得超8个赞

首先星号符号的作用:


**dict is equivalent to k1=v1, k2=v, ...

*dict is equivalent to [k1, k2, ...]

所以你在做:


# This print('{first} {last}'.format(**data)) is:

print('{first} {last}'.format(first='Hodor', last='Hodor!'))


# This print('\n {} \n {} \n {}'.format(*bdays)) is:

print('\n {} \n {} \n {}'.format(['Wesley Neill', 'Victoria Neill', 'Heather Neill']))


# This print('\n {} \n {} \n {}'.format(**bdays)) is:

print('\n {} \n {} \n {}'.format('Wesley Neill'='January 6, 1985', 'Victoria Neill'='August 25, 1992', 'Heather Neill'='June 25, 1964'))

最终格式字符串中没有说明任何键,因此您会收到错误消息。


查看完整回答
反对 回复 2022-05-24
  • 2 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

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