如何将str.format()与python中的字典一起使用?

如何将str.format()与python中的字典一起使用?,python,dictionary,Python,Dictionary,这段代码有什么问题 dic = { 'fruit': 'apple', 'place':'table' } test = "I have one {fruit} on the {place}.".format(dic) print(test) >>> KeyError: 'fruit' 应该是 test = "I have one {fruit} on the {place}.".format(**dic) 请注意。不接受单个字典,而是接受关键字参数。您也可以使用以下代码

这段代码有什么问题

dic = { 'fruit': 'apple', 'place':'table' }
test = "I have one {fruit} on the {place}.".format(dic)
print(test)

>>> KeyError: 'fruit'
应该是

test = "I have one {fruit} on the {place}.".format(**dic)

请注意。不接受单个字典,而是接受关键字参数。

您也可以使用以下代码:

dic = { 'fruit': 'apple', 'place':'table' }
print "I have one %(fruit)s on the %(place)s." % dic
如果您想了解有关格式化方法的更多信息,请使用:

自Python 3.2以来:

test = "I have one {fruit} on the {place}.".format_map(dic)
优点是它可以接受任何映射,例如,一个具有动态生成值的
\uuuu getitem\uuuu
方法的类,或者允许您使用不存在的键的
集合.defaultdict

它可以在旧版本上模拟:

from string import Formatter

test = Formatter().vformat("I have one {fruit} on the {place}.", (), dic)

谢谢,它起作用了。你能更新答案来解释为什么我必须在字典前面添加
***
吗?@bogdan,
***
表示字典应该扩展为关键字参数列表。
format
方法不使用字典作为参数,但它使用关键字参数。@bogdan:在我的答案中添加了两个链接。原因基本上是“因为文档中这么说”。@bogdan,它只是告诉Python您正在为函数提供一个字典,以便它可以提供字典中的值,而不是字典本身。调用任何函数时都可以执行相同的操作。如果函数“f”接受参数“a”、“b”和“c”,则可以使用
dic={'a':1,'b':2,'c':3}
并调用
f(**dic)
。原因是
“我在{0[place]}上有一个{0[four]}。”
也可以工作-
dic
是这里的第0个位置参数,您可以在模板中访问它的键。
%
运算符不应该根据Python文档在新代码中使用。您能给我一个参考吗,这样我就可以阅读更多关于它的内容了?非常感谢),将尽量避免从中使用它now@Mark:
%
在Python3.1中应该被弃用,但他们从来没有这样做过。它不会很快消失(或者根本不会消失),所以仍然可以使用它。@Sven,很高兴知道,谢谢。不过,我还是会选择
格式,首先是因为它是推荐的,其次是因为它看起来更干净