如何更新 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]]
我正在使用 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]]