需要一个带有值作为两个列表的defaultdict

时间:2018-11-11 18:12:13

标签: python dictionary defaultdict

在Python中,我想要类似

dict = defaultdict((list,list))

基本上,每个键我都想要两个列表!

使用上面的代码片段,我得到错误第一个参数必须是可调用的。我该如何实现?

2 个答案:

答案 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)

这不是某种类型推断,您只需提供一个生成默认值的函数即可。当intlistdict不带参数时,会生成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])