提问人:xray911 提问时间:11/12/2023 更新时间:11/12/2023 访问量:59
在 Python 中将多个列表添加到字典最终会覆盖以前的列表项?[复制]
Adding multiple lists to a dictionary in Python ends up overwriting previous list items? [duplicate]
问:
我对软件和 Python 比较陌生,我已经在这个问题上工作了几个小时。我也尝试过谷歌搜索,但无法找到问题的答案。
我有一本字典,里面有 3 个列表。这些列表包含两个值。我正在尝试用列表填充第二个字典,并将第一个字典中的列表中的值添加到某个项目的计算位置。
例如,第一个字典的第一个列表包含值 21 和 25。我计算的第一个位置是 100。现在,我希望我的第二个字典有一个值为 121 和 125 的列表。第二个列表项包含值 -21 和 -25。这应该会为第二个字典生成第二个列表,其值为 79 和 75。这个想法是第二个字典将包含 n 个位置 x 3 个列表 = 3n 个列表项。
我创建了 3 个与临时列表项嵌套在一起的 for 循环。我计算值,将 添加到临时列表,如果我完成了第一个列表,我会将它们添加到第二个字典中。
当我查看结果时,我发现代码符合我的预期。但看看结果,我看到了别的东西。看起来最后一个列表被放在 al 键上。print("adding" ,str(tempList), "with key", str(key))
print(forbiddenAreas)
pitch = 100
numberItems = 3
forbiddenAreaItem = {
"area1": [21, 25],
"area2": [-21, -25],
"area3": [12, 15]
}
forbiddenAreas = {}
tempList = []
if numberItems == 1:
# print("There is one item")
firstItemDistance = 0
else:
# print("There are multiple items")
firstItemDistance = ((numberItems / 2) - 0.5) * pitch
key = 1
for i in range(numberItems):
itemLocation = firstItemDistance - pitch * i
for y in forbiddenAreaItem:
tempList.clear()
for x in forbiddenAreaItem[y]:
tempList.append(itemLocation + x)
forbiddenAreas[key] = tempList
print("adding" ,str(tempList), "with key", str(key))
key += 1
print(forbiddenAreas)
我尝试在其他循环中切换,但无法生成有效的解决方案。我还尝试使用代替当前方法。forbiddenAreas[key] = tempList
forbiddenAreas.update
答:
重用相同的 tempList 对象会使字典中的所有键都具有相同的值。
您应该在内部循环中创建一个新的 tempList,以便每个键都有自己的列表。
喜欢这个:
pitch = 100
numberItems = 3
forbiddenAreaItem = {
"area1": [21, 25],
"area2": [-21, -25],
"area3": [12, 15]
}
forbiddenAreas = {}
if numberItems == 1:
firstItemDistance = 0
else:
firstItemDistance = ((numberItems / 2) - 0.5) * pitch
key = 1
for i in range(numberItems):
itemLocation = firstItemDistance - pitch * i
for y in forbiddenAreaItem:
tempList = []
for x in forbiddenAreaItem[y]:
tempList.append(itemLocation + x)
forbiddenAreas[key] = tempList
print("adding", str(tempList), "with key", str(key))
key += 1
print(forbiddenAreas)
评论
for x in forbiddenAreaItem[y]:
forbiddenAreas
for y in forbiddenAreaItem:
for x in forbiddenAreaItem[y]
forbiddenAreas
上一个:在列表中查找三角形数字
评论
tempList
forbiddenAreas[key] = tempList
forbiddenAreas