希望有人能帮我,因为我的研究都没有帮到我。我有一本简单的字典:
mydict = {
1: {1: 'Foo'},
2: {1: 'Bar'}
}
我正在复制每个键/值对,并分配新的键值:
nextKey = len(mydict) + 1
for currKey in range(len(mydict)):
mydict[nextKey] = mydict[currKey + 1]
nextKey += 1
这给了我一个
{
1: {1: 'Foo'},
2: {1: 'Bar'},
3: {1: 'Foo'},
4: {1: 'Bar'},
}
我现在想向所有现有的嵌套字典添加一个新的键值对。每个嵌套字典的键应为“2”,每个键的值应增加:
newValue = 1
for key in mydict:
mydict[key][2] = newValue
newValue += 1
我期待着:
{
1: {1: 'Foo', 2: 1},
2: {1: 'Bar', 2: 2},
3: {1: 'Foo', 2: 3},
4: {1: 'Bar', 2: 4},
}
但这给了我一个
{
1: {1: 'Foo', 2: 3},
2: {1: 'Bar', 2: 4},
3: {1: 'Foo', 2: 3},
4: {1: 'Bar', 2: 4},
}
我使用了我正在使用的IDE的可视化工具,在我运行循环来复制键/值对之后,新的键似乎只是引用了复制的值,而不是实际包含它,也许这与此有关?你知道吗
有人能帮忙/解释一下吗?你知道吗
你的假设是对的。最小示例:
如果要复制对象,有几种方法:
new = old[:]
,使用切片表示法dict.copy()
这是因为在第一个循环中,您没有复制嵌套的字典,而只是向相同的字典添加一个新引用。你知道吗
举一个更清楚的例子:如果你在两个循环之后(用你的原始代码)跳出第二个循环,你的输出将是:
所以你可以这样修复你的第一个循环:
copy()
函数创建字典的真实副本,这样您就可以在第二个循环中访问这4个不同的字典。你知道吗相关问题 更多 >
编程相关推荐