首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将defaultdict(Set)转换为defaultdict(list)?

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

Stack Overflow用户
提问于 2016-05-13 14:35:54
回答 3查看 5.3K关注 0票数 4

我有一个defaultdict(Set)

代码语言:javascript
复制
from sets import Set
from collections import defaultdict
values = defaultdict(Set)

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

代码语言:javascript
复制
defaultdict(list)(values)

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-13 14:41:39

您可以使用以下方法:

代码语言:javascript
复制
>>> 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会做得很好:

代码语言:javascript
复制
 >>> {k: list(v) for k, v in values.items()}
 {'a': [1]}
票数 5
EN

Stack Overflow用户

发布于 2016-05-13 14:42:12

代码语言:javascript
复制
defaultdict(list, values)

defaultdict构造函数的工作方式类似于带有强制default_factory参数的dict构造函数。但是,这不会将任何现有的值从集合转换为列表。如果您想要这样做,则需要手动执行:

代码语言:javascript
复制
defaultdict(list, ((k, list(v)) for k, v in values.viewitems()))

但是,在这一点上,您甚至可能根本不希望出现默认的情况:

代码语言:javascript
复制
{k: list(v) for k, v in values.viewitems()}
票数 3
EN

Stack Overflow用户

发布于 2017-02-28 16:54:48

假设a = set(),并且您已经用唯一的值填充了它。然后,当使用defaultdict时,您可以将其转换为一个列表:defaultdict(list(a))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37212808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档