我有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
,我该如何进行转换?
答案 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))