首页 > 解决方案 > 如何为内部字典键创建新列表或设置对象,以便不重复更新同一对象?

问题描述

我正在尝试创建一个内部字典,该字典将值存储在列表或集合对象中(在此示例中使用集合)。

t = [('Jobs', set()), ('Titles', set())]
inn_d = lambda: dict(t)

并创建一个默认字典并传递inn_d给它。

d = defaultdict(inn_d)

在为和外部键创建条目时d,每个内部键的两个值都会更新。

d['A']['Jobs'].add('Cook')
d['B']['Titles'].add('President')
d
defaultdict(<function <lambda> at 0x0000016691157DC0>, {'A': {'Jobs': {'Cook'}, 'Titles': {'President'}}, 'B': {'Jobs': {'Cook'}, 'Titles': {'President'}}})

什么时候应该

defaultdict(<function <lambda> at 0x0000016691157DC0>, {'A': {'Jobs': {'Cook'}, 'Titles': set()}, 'B': {'Jobs': set(), 'Titles': {'President'}}})

我知道两者都使用相同的集合对象Jobs并且Titles被调用-我不确定在创建内部字典时如何创建新的集合对象。

感谢您的帮助。

标签: pythondictionarylambdadefaultdict

解决方案


每次创建一个新的,如下所示:

def inn_d():
    return {'Jobs': set(), 'Titles': set()}

顺便说一句,命名 lambdas 是不好的做法


推荐阅读