python:defaultdict不使用字符串格式

Wel*_*lls 2 python dictionary string-formatting default-value

这很容易:

'foo {bar}'.format(**{'bar': 0})
Run Code Online (Sandbox Code Playgroud)

这不起作用,产生一个KeyError:

from collections import defaultdict
d = defaultdict(int)
'foo {bar}'.format(**d)
Run Code Online (Sandbox Code Playgroud)

有没有办法容纳defaultdict字符串格式?

Sha*_*ger 6

**拆包产生一个dict,这就是为什么这不起作用.如果你正在运行Python 3.2或更高版本,你可以传递defaultdict没有解包的str.format_map存在,这正是为了传递非dict映射类型:

'foo {bar}'.format_map(d)
Run Code Online (Sandbox Code Playgroud)

编辑:显然,至少在Python 3.5中,'foo {bar}'.format(**d)实际上可以使用a defaultdict(int),并且d被修改(在格式化之后,reprdefaultdict(<class 'int'>, {'bar': 0})),所以它看起来像在现代Python中,format_map可能不是子类的必需dict.有趣.