如何更新 defaultdict(list) 字典中的列表元素?

How to update the list elements in a defaultdict(list) dictionary?

我正在使用 Python 的集合库制作字典,其中键是整数,值是列表。我正在使用 defaultdict(list) 命令。我正在尝试,但未能成功编辑这些列表中的值元素。

我认为列表理解应该适用于此,但我不断收到语法错误。我附上我在下面尝试过的内容:

import collections 

test = collections.defaultdict(list) 
test[4].append(1)
test[4].append(5)
test[4].append(6)
#This would yield {4: [1,5,6]}

run_lengths = [1,3,4,6] #dummy data

for i in run_lengths:
    #I would like to add 3 to each element of these lists which are values.
    test[i][j for j in test[i]] += i

假设您想就地修改列表,您需要覆盖每个元素,因为整数是不可变的:

test[4][:] = [e+3 for e in test[4]]

输出:

defaultdict(list, {4: [4, 8, 9]})

如果您不关心生成新对象(即您没有 link 变量名到 test[4],您可以使用:

test[4] = [e+3 for e in test[4]]

有什么区别?

第一种情况就地修改列表。如果其他变量指向列表,则更改将反映出来:

x = test[4]
test[4][:] = [e+3 for e in test[4]]
print(x, test)
# [4, 8, 9] defaultdict(<class 'list'>, {4: [4, 8, 9]})

在另一种情况下,列表被替换为一个新的、独立的,。所有潜在的绑定都丢失了:

x = test[4]
test[4] = [e+3 for e in test[4]]
print(x, test)
# [1, 5, 6] defaultdict(<class 'list'>, {4: [4, 8, 9]})

在你的循环中

假设 run_lengths 包含要更新的密钥列表:

for i in run_lengths:
    test[i][:] = [e+3 for e in test[i]]