如何将 defaultdict(Set) 转换为 defaultdict(list)?
How can I convert defaultdict(Set) to defaultdict(list)?
我有一个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
,我该如何转换?
您可以使用以下内容:
>>> 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
中相同的参数。在这种情况下,第二个参数是一个生成器表达式,它包含 returns 个包含键和值的元组。
请注意,如果您只需要将其存储为 JSON 普通 dict
就可以了:
>>> {k: list(v) for k, v in values.items()}
{'a': [1]}
defaultdict(list, values)
defaultdict 构造函数的工作方式类似于 dict 构造函数,前面有一个强制性的 default_factory
参数。但是,这不会将任何现有值从集合转换为列表。如果你想这样做,你需要手动完成:
defaultdict(list, ((k, list(v)) for k, v in values.viewitems()))
不过,那时您可能根本不需要 defaultdict:
{k: list(v) for k, v in values.viewitems()}
假设 a = set()
,您已经用唯一值填充了它。然后,当使用 defaultdict
时,您可以将其转换为列表:defaultdict(list(a))
我有一个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
,我该如何转换?
您可以使用以下内容:
>>> 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
中相同的参数。在这种情况下,第二个参数是一个生成器表达式,它包含 returns 个包含键和值的元组。
请注意,如果您只需要将其存储为 JSON 普通 dict
就可以了:
>>> {k: list(v) for k, v in values.items()}
{'a': [1]}
defaultdict(list, values)
defaultdict 构造函数的工作方式类似于 dict 构造函数,前面有一个强制性的 default_factory
参数。但是,这不会将任何现有值从集合转换为列表。如果你想这样做,你需要手动完成:
defaultdict(list, ((k, list(v)) for k, v in values.viewitems()))
不过,那时您可能根本不需要 defaultdict:
{k: list(v) for k, v in values.viewitems()}
假设 a = set()
,您已经用唯一值填充了它。然后,当使用 defaultdict
时,您可以将其转换为列表:defaultdict(list(a))