首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用工厂函数创建默认字典作为默认条目

使用工厂函数创建默认字典作为默认条目
EN

Stack Overflow用户
提问于 2020-04-18 21:00:36
回答 1查看 109关注 0票数 0

我想要一个Python3defaultdict,它有一个字典作为条目。应该是这样的:

代码语言:javascript
运行
复制
my_dict[first_index] -> {second_index_1: value_1, second_index_2: value_2}

文档中概述了如何创建一个defaultdict:

https://docs.python.org/3.6/library/collections.html#collections.defaultdict

默认类型int的defaultdict示例。

代码语言:javascript
运行
复制
d = defaultdict(int)

for k in s:

    d[k] += 1

通过工厂函数创建更复杂的条目( defaultdict的第一个参数必须是可调用的):

代码语言:javascript
运行
复制
def constant_factory(value):

    return lambda: value

d = defaultdict(constant_factory('<missing>'))

问题是,constant_factory函数在使用它时总是返回相同的dict,如下所示:

代码语言:javascript
运行
复制
def constant_factory(value):
    return lambda: value

my_dict = defaultdict(constant_factory({"second_index_1":None,"second_index_2":None}))

my_dict["first_index_1"]["second_index_1"] = "value_1"

产量:

代码语言:javascript
运行
复制
my_dict["first_index_1"]["second_index_1"] -> "value_1"

如预期的那样。

现在正在做

代码语言:javascript
运行
复制
def constant_factory(value):
    return lambda: value

my_dict = defaultdict(constant_factory({"second_index_1":None,"second_index_2":None}))

my_dict["first_index_1"]["second_index_1"] = "value_1"
my_dict["first_index_2"]["second_index_1"] = "value_2"

产量:

代码语言:javascript
运行
复制
my_dict["first_index_1"]["second_index_1"] -> "value_2"

这意味着,通过访问dict中的第二个条目,我们意外地修改了第一个条目。

EN

Stack Overflow用户

发布于 2020-04-18 21:00:36

问题是工厂函数,它只创建一个实例:

代码语言:javascript
运行
复制
def constant_factory(value):
    return lambda: value

可以通过使用

代码语言:javascript
运行
复制
def constant_factory(value):
    return lambda: value.copy()

每次复制dict都会创建不同的实例。

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

https://stackoverflow.com/questions/61296165

复制
相关文章

相似问题

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