如何理解defaultdict创建的字典?

时间:2012-08-24 11:04:46

标签: python

我正在迭代使用以下内容创建的dict。

 tree = defaultdict(partial(defaultdict, partial(defaultdict, list)))
 for dt, hour, value in flat_list:
     tree[dt][hour]=[]
     tree[dt][hour].append(value)

我的输出如下:

 for k,v in tree.iteritems():
     2012-08-07 defaultdict(<functools.partial object at 0x1e0a050>, {'17': ['30']})
     2012-08-24 defaultdict(<functools.partial object at 0x1e0a050>, {'3': ['70']})

如何摆脱这些东西?我怎么像普通的词典?:

defaultdict(<functools.partial object at 0x1e0a050>

1 个答案:

答案 0 :(得分:4)

你已经像普通的dict一样迭代默认的dicts,但你也打印 defaultdict表示。

要打印这些,就像打印常规字典一样,只需将它们变成一个:

 for k,v in tree.iteritems():
     print k, dict(v)

请注意,defaultdictdict的直接子类,除了更新的__getitem__行为和更新的__repr__ hook 1 之外, defaultdict行为完全就像普通dict一样,当然需要进行迭代。

1 __copy____deepcopy__也会被覆盖,以便在使用defaultdict模块时创建新的copy。出于同样的原因,为__reduce__模块提供了自定义pickle