2015-04-01 51 views
0

我有一個Python的字典有問題。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()中,則它存儲dictionaty [value]中的所有newValues列表, 如果從列表中取得的值已經存在於dictionary.keys()它需要由dictionary [value]保存的列表並嘗試以某種方式升級它。

+0

這段代碼究竟在幹什麼?什麼'listValues'有'.keys'?什麼是'hashFamily'? 'maxFunction'? – jonrsharpe 2015-04-01 15:03:34

+0

hashFamily它只是一個基於hashedIndex返回x的哈希值的函數,maxFunction是最大迭代次數,因此它是一個costant值。 listValues它是一個返回一組單詞或數字的函數,它返回一個字典對象。 – 2015-04-01 15:11:03

+0

所以,如果它返回一個字典,爲什麼在它的名字是「列表」?請閱讀http://stackoverflow.com/help/mcve – jonrsharpe 2015-04-01 15:11:58

回答

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 

將至少意味着它們不共享的參考。

+0

是啊!我是一名Python初學者,對此我不太瞭解。不過謝謝! – 2015-04-01 16:13:12