Python字典问题更新值

时间:2015-04-01 15:00:07

标签: python dictionary

我的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]保存的列表并尝试以某种方式升级它。

1 个答案:

答案 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

至少意味着他们不会分享参考资料。