如何解决拆包时defaultdict提高KeyError
在将collections.defaultdict
与.format()
方法结合使用时,我得到了 KeyError
Shell执行
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'
由于我正在使用KeyError
,所以我不希望有defaultdict
。为什么会这样?
除此之外,我想用一些默认值填充foo
变量,我该怎么做?
解决方法
使用**
进行拆包会转换为真实的dict
(或功能上等效的不相关数据结构;实现细节非常丰富),因此defaultdict
的功能不会被使用。在这种情况下,您可以改为使用use str.format_map
,它接受(不解包)任意映射,而无需将其强制为dict
。正是出于这个目的而存在(引用文档:“例如,如果mapping
是dict的子类,这将很有用”):
In [5]: foo.format_map(default)
Out[5]: 'Foo: 0\nBar: 0'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。