2015-04-01 3 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, которые я выбрал с помощью key = value, но этот фрагмент кода меняет все значения словаря. Можете ли вы предложить мне решение этой проблемы?

Я пытаюсь объяснить, что делает алгоритм: выполняет итерацию по ключам переменной значений и сохраняет в переменной listOfKeyX список, связанный с ключом. Он создает некоторые случайные значения, хранящиеся в newValues ​​[]. После этого он повторяется в спискеOfKeyX , если значение, взятое из списка, уже не существует в словаре.keys(), он сохраняет все список newValues ​​в dictionaty [значение], , если значение, взятое из списка, уже существует в dictionary.keys() занимает список, хранящийся в словаре [значение], и пытается каким-то образом его обновить.

+0

Что именно делает этот код? Что означает 'listValues'' .keys'? Что такое 'hashFamily'? 'MaxFunction'? – jonrsharpe

+0

hashFamily - это просто функция, которая возвращает хеш-значение x на основе hashedIndex, maxFunction - это максимальное количество итераций, поэтому это значение costant. listValues ​​- это функция, которая возвращает набор слов или число, и возвращает объект словаря. –

+0

Итак, если он возвращает словарь, почему 'list' в его имени? Пожалуйста, прочитайте http://stackoverflow.com/help/mcve – jonrsharpe

ответ

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

Да! Я начинающий с питоном, и я не так много знаю об этом. Однако спасибо! –

Смежные вопросы