Python中的defaultdict,值类型为字符串

13

需要创建一个defaultdict,默认值类型为普通的Python字符串,但是我的方法似乎不起作用?发布编译错误信息。我正在使用Python 2.7,想知道有什么好的想法如何修复?谢谢。

代码

import collections

a = collections.defaultdict("")

a[1]="Hello"
a[2]="World"

print a

错误信息

  a = collections.defaultdict("")
TypeError: first argument must be callable

3
collections.defaultdict(str) 的翻译是 "默认字典",它的值类型是字符串。 - Delgan
@Delgan,不错!尝试了“string”但不起作用,从未想过使用更短的缩写“str”。如果您能回复一下,我会将其标记为答案以使其他人受益。谢谢。 - Lin Ma
1
这是因为str是一个内置函数(built-in function),但是Python中不存在string。你可以接受已经发布的答案之一。 - Delgan
谢谢@Delgan,点赞。内置函数?我以为defaultdict需要一个类而不是一个函数? - Lin Ma
2个回答

27

正如错误提示所说,第一个参数必须是一个可调用的函数,它能够生成你想要的值。使用 str

a = collections.defaultdict(str)

如果必要,您可以使用lambda函数创建一个包装器:

a = collections.defaultdict(lambda: 'initial')

感谢TigerhawkT3的所有帮助,我会将您的回复标记为答案。 - Lin Ma

2

没错,你得到的是一个字符串实例,而不是返回字符串的对象。你需要使用collections.defaultdict(str),因为str()会返回""。你可以通过以下方式找出类型:

>>> type("")
<class 'str'>

因此,如果您不知道类的名称,您可以这样做:
a = collections.defaultdict(type(""))

或者

a = collections.defaultdict("".__class__)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接