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

jon*_*alv 4 python defaultdict

我有一个defaultdict(Set):

from sets import Set
from collections import defaultdict
values = defaultdict(Set)
Run Code Online (Sandbox Code Playgroud)

我希望在构建时使用“设置”功能来删除重复项。下一步我想将其存储为 json。由于 json 不支持此数据结构,我想将数据结构转换为 adefaultdict(list)但当我尝试时:

defaultdict(list)(values)
Run Code Online (Sandbox Code Playgroud)

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

nie*_*mmi 6

您可以使用以下内容:

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

defaultdict构造函数default_factory作为第一个参数,后面可以跟与正常中相同的参数dict。在本例中,第二个参数是一个生成器表达式,它返回由键和值组成的元组。

请注意,如果您只需要将其存储为 JSON 普通文件dict就可以了:

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

  • jonalv 可能不需要这里的 defaultdict 功能。您可以使用更简单的字典理解:`new_values = {k: list(v) for k, v in values.items()}` (2认同)