我的python字典有问题。
import random
values = {"A" : [2,3,4], "B" : [2], "C" : [3,4]}
# this variable have to store as keys all the values in the lists kept by the variable values, and as values a list of numbers
# example of dictionary :
# {"2" : [2, 6 ,7 ,8, 8], "3" : [9, 7, 6, 5, 4], "4" : [9, 7, 5, 4, 3]}
dictionary = {}
for x in values.keys():
listOfKeyX = values[x]
newValues = []
for index in range (0, 5):
newValue = random.randint(0,15)
newValues.append(newValue)
for value in listOfKeyX:
if value in dictionary.keys():
for index in range (0, 5):
#i want to update a value in dictionary only if the "if" condition is satisfied
if(newValues[index] < dictionary[value][index]):
dictionary[value][index] = newValues[index]
else:
dictionary.setdefault(value, [])
dictionary[value] = newValues
print dictionary
我在尝试更改字典值时遇到问题。我想只修改我通过key = value选择的对键值,但这段代码会更改所有字典值。 你能建议我解决这个问题吗?
我尝试解释算法的作用: 它迭代值变量的键,并在变量listOfKeyX中保存链接到键的列表。 它创建了一些由newValues []保存的随机值。 之后,它迭代listOfKeyX 如果列表中的值不存在于dictionary.keys()中,则它将所有newValues列表存储在dictionaty [value]中, 如果从列表中获取的值已经存在于dictionary.keys()中,它将采用字典[value]保存的列表并尝试以某种方式升级它。
答案 0 :(得分:0)
在第一个循环中,您运行此代码三次:
dictionary.setdefault(value, []) # create brand new list
dictionary[value] = newValues # ignore that and use newValues
这意味着dictionary
中的每个值都是对同一列表的引用。我仍然不能完全确定你正在寻找的结果是什么,但用以下内容替换上述行:
dictionary[value] = newValues[:] # shallow copy creates new list
至少意味着他们不会分享参考资料。