我正在使用Python 3.8.5
我创建了一些类似这样的对象:
class TestClass:
def __init__(self, key, value):
self.key=key
self.value=value
test1 = TestClass(1, 'a')
test2 = TestClass(2, 'b')
test3 = TestClass(3, 'c')
test_list = [test1, test2, test3]
我想创建一个字典来跟踪此对象中的修改:
object_mapper = {
'ClassNotRelevant': None,
'TestClass': None,
'ClassNotRelevant2': None,
}
test_dict = {test.key: object_mapper for test in test_list}
#output
{1: {'ClassNotRelevant': None, 'TestClass': None, 'ClassNotRelevant2': None},
2: {'ClassNotRelevant': None, 'TestClass': None, 'ClassNotRelevant2': None},
3: {'ClassNotRelevant': None, 'TestClass': None, 'ClassNotRelevant2': None}}
现在,我想为字典中的每个类设置value属性,如下所示:
#expected dictionary
#output
{1: {'ClassNotRelevant': None, 'TestClass': 'a', 'ClassNotRelevant2': None},
2: {'ClassNotRelevant': None, 'TestClass':'b', 'ClassNotRelevant2': None},
3: {'ClassNotRelevant': None, 'TestClass':'c', 'ClassNotRelevant2': None}}
我正在努力做到以下几点:
for test in test_list:
test_dict[test.key]['TestClass']= test.value
但结果是:
{1: {'ClassNotRelevant': None, 'TestClass': 'c', 'ClassNotRelevant2': None},
2: {'ClassNotRelevant': None, 'TestClass': 'c', 'ClassNotRelevant2': None},
3: {'ClassNotRelevant': None, 'TestClass': 'c', 'ClassNotRelevant2': None}}
我尝试了以下不同的解决方案:Updating nested dictionaries when data has existing key
但一切都成功了,我做错了什么
问题就在这里
当你这么做的时候
test_dict = {test.key: object_mapper for test in test_list}
输出为
这个
{'ClassNotRelevant': None, 'TestClass': None, 'ClassNotRelevant2': None}
是与键'1 2 3'对应的同一个对象(object_mapper
)因此,当您使用此更新时:
这将更新
object_mapper
对象,以便第一次迭代后:
第二次迭代
第三次迭代
所以不是
test_dict = {test.key: object_mapper for test in test_list}
使用
test_dict = {test.key: object_mapper.copy() for test in test_list}
它将为每个条目创建
shallow_copy
个object_mapper
对象,而不是将object_mapper
对象本身放在那里下面是解决这个问题的代码。它将为每个迭代创建
object_mapper
的副本相关问题 更多 >
编程相关推荐