在Python中,我想要类似
dict = defaultdict((list,list))
基本上,每个键我都想要两个列表!
使用上面的代码片段,我得到错误第一个参数必须是可调用的。我该如何实现?
答案 0 :(得分:1)
将defaultdict
作为创建空列表的函数的参数:
from collections import defaultdict
def pair_of_lists():
return [[], []]
d = defaultdict(pair_of_lists)
d[1][0].append(3)
d[1][1].append(42)
print(d)
# defaultdict(<function pair_of_lists at 0x7f584a40b0d0>, {1: [[3], [42]]})
答案 1 :(得分:0)
这不是某种类型推断,您只需提供一个生成默认值的函数即可。当int
,list
,dict
不带参数时,会生成0
,[]
,{}
,这在defaultdict声明中经常被利用。 Python没有用于列表等的内置构造函数。因此它像
di = defaultdict(lambda : ([1,2,3], ['a', 'cb']))
虽然Python允许列表的元组(成对),但您可能会遇到一些问题,例如与列表元组的哈希。为了安全起见,您可以将默认设置为两个列表中的一个。请注意,您已将其设置为特定列表,无论是否为空,也没有列表类型/构造函数。它实际上是关于设置默认值的,而不是类型的声明-python列表是无类型的。
from collections import defaultdict
l1 = []
l2 = ["another", "default", "list"]
di = defaultdict(lambda : [ l1, l2] )
print (di[3])