解压时 defaultdict 引发 KeyError

JPG*_*JPG 4 python python-3.x defaultdict keyerror

KeyError在使用collections.defaultdictwith.format()方法时得到了

外壳执行

In [1]: from collections import defaultdict                                                                                                                                                                        

In [2]: foo = "Foo: {foo}\nBar: {bar}"                                                                                                                                                                             

In [3]: default = defaultdict(lambda: 0)                                                                                                                                                                           

In [4]: foo.format(**default)                                                                                                                                                                                      
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-4-799cab129cf2> in <module>
----> 1 foo.format(**default)

KeyError: 'foo'
Run Code Online (Sandbox Code Playgroud)

我不期待 aKeyError因为我使用的是defaultdict. 为什么会发生这种情况?

除此之外,我想foo用一些默认值填充变量,我该怎么做?

Sha*_*ger 11

使用**拆包转换为真正的dict(或功能相当的不相关的数据结构;实现细节嘉豪),这样的功能defaultdict没有得到使用。在这种情况下,您可以改为使用str.format_map,它接受(无需解包)任意映射,而不会将其强制为dict。它正是为此目的而存在的(引用文档:“如果例如mapping是 dict 子类,这很有用”):

In [5]: foo.format_map(default)
Out[5]: 'Foo: 0\nBar: 0'
Run Code Online (Sandbox Code Playgroud)

  • @ArakkalAbu:是的,对于那些在 Python 2 中学习 Python 的人来说,他们从来没有见过它(直到 3.2 才添加)。它并不常见,但您的用例是它有用的主要情况。 (2认同)