gpt4 book ai didi

python - 如何将列表的每个不同值分配给同一字典的不同键?

转载 作者:太空宇宙 更新时间:2023-11-04 01:58:33 25 4
gpt4 key购买 nike

我正在尝试创建一个字典(总和),其键是列表的总和,值是列表本身。此列表包含不同数量的元素,但名称相同。每次更改列表的元素并将此更改的列表(相同名称)分配给不同的键时,先前分配给键的值也会更改。

在寻找一些合适的答案时,我从这里(https://stackoverflow.com/a/52806573/7198441)了解到这可能是因为 Python 也引用了列表(如果我在这里犯了错误,请纠正我)。现在,我想知道,是否有一种方法可以将在不同迭代阶段具有相同名称但不同元素的列表分配给同一字典的不同键。

l = [1, 2, 3, 4, 5]

sums = {}

while len(l) :

l_sum = sum(l)
sums[l_sum] = l

print(sums)
print()

l.pop()

实际结果:

{15: [1, 2, 3, 4, 5]}

{15: [1, 2, 3, 4], 10: [1, 2, 3, 4]}

{15: [1, 2, 3], 10: [1, 2, 3], 6: [1, 2, 3]}

{15: [1, 2], 10: [1, 2], 6: [1, 2], 3: [1, 2]}

{15: [1], 10: [1], 6: [1], 3: [1], 1: [1]}

预期:

{15: [1, 2, 3, 4, 5]}

{15: [1, 2, 3, 4, 5], 10: [1, 2, 3, 4]}

{15: [1, 2, 3, 4, 5], 10: [1, 2, 3, 4], 6: [1, 2, 3]}

{15: [1, 2, 3, 4, 5], 10: [1, 2, 3, 4], 6: [1, 2, 3], 3: [1, 2]}

{15: [1, 2, 3, 4, 5], 10: [1, 2, 3, 4], 6: [1, 2, 3], 3: [1, 2], 1: [1]}

最佳答案

问题是,当您执行 sums[l_sum] = l 时,您使用的是对原始列表的引用。因此,while 循环的任何一步中的所有更改都会影响使用此列表的所有其他位置。这就是为什么您会在每张打印品中看到您的列表发生变化的原因。

简单的解决方案是使用 sums[l_sum] = l[:] 复制列表。


while len(l) :
l_sum = sum(l)
sums[l_sum] = l[:] # <--- changed here from l to l[:]
print(sums)
print()
l.pop()

# {15: [1, 2, 3, 4, 5]}

# {15: [1, 2, 3, 4, 5], 10: [1, 2, 3, 4]}

# {15: [1, 2, 3, 4, 5], 10: [1, 2, 3, 4], 6: [1, 2, 3]}

# {15: [1, 2, 3, 4, 5], 10: [1, 2, 3, 4], 6: [1, 2, 3], 3: [1, 2]}

# {15: [1, 2, 3, 4, 5], 10: [1, 2, 3, 4], 6: [1, 2, 3], 3: [1, 2], 1: [1]}

关于python - 如何将列表的每个不同值分配给同一字典的不同键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56257400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com