如何将defaultdict(Set)转换为defaultdict(list)?

时间:2016-05-13 14:35:55

标签: python defaultdict

我有defaultdict(Set)

from sets import Set
from collections import defaultdict
values = defaultdict(Set)

我在构建它时需要Set功能以删除重复项。下一步我想将其存储为json。由于json不支持这种数据结构,我想将数据结构转换为defaultdict(list)但是当我尝试时:

defaultdict(list)(values)

我得到:TypeError: 'collections.defaultdict' object is not callable,我该如何进行转换?

3 个答案:

答案 0 :(得分:3)

您可以使用以下内容:

>>> values = defaultdict(Set)
>>> values['a'].add(1)
>>> defaultdict(list, ((k, list(v)) for k, v in values.items()))
defaultdict(<type 'list'>, {'a': [1]})

defaultdict构造函数将default_factory作为第一个参数,后跟与普通dict相同的参数。在这种情况下,第二个参数是一个生成器表达式,它返回包含键和值的元组。

请注意,如果您只需要将其存储为JSON,那么dict就可以了。

 >>> {k: list(v) for k, v in values.items()}
 {'a': [1]}

答案 1 :(得分:3)

defaultdict(list, values)

defaultdict构造函数的作用类似于dict构造函数,前面有一个强制default_factory参数。但是,这不会将任何现有值从Sets转换为列表。如果你想这样做,你需要手动完成:

defaultdict(list, ((k, list(v)) for k, v in values.viewitems()))

尽管如此,你可能根本不想要一个defaultdict:

{k: list(v) for k, v in values.viewitems()}

答案 2 :(得分:0)

我不确定我完全理解,因为我不熟悉旧的from sets import Set功能。你不能只做以下事情:

a = set(),并且您已经使用唯一值填充了它。然后,使用defaultdict时,您可以将其投放到列表中:defaultdict(list(a))