Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Есть ли возможность обновлять ключи в словаре ?


Автор: doomik 6.7.2007, 00:46
Привет!
Допустим у меня есть словарь:
Код

d = { 'Key1': 'Value1' }

Как можно обновить 'Key1' на другое значения ?

Автор: Daevaorn 6.7.2007, 01:19
Цитата(doomik @  6.7.2007,  01:46 Найти цитируемый пост)
Как можно обновить 'Key1' на другое значения ? 

Код

d['key1'] = 'NewValue'

?

Автор: JackYF 6.7.2007, 11:00
Daevaorn, не, это - обновление значения по ключу.
А ему надо обновить ключ.

По сабжу думаю, что удалить этот ключ (предварительно считав значение) и добавить другой с этим же значением будет нормальным выходом.

Автор: pythonwin 6.7.2007, 15:06
Цитата(JackYF @  6.7.2007,  14:00 Найти цитируемый пост)
По сабжу думаю, что удалить этот ключ (предварительно считав значение) и добавить другой с этим же значением будет нормальным выходом. 


Код

d['Key2']=d['Key1']
del d['Key1']

Автор: doomik 6.7.2007, 15:07
JackYF,
Цитата

По сабжу думаю, что удалить этот ключ (предварительно считав значение) и добавить другой с этим же значением будет нормальным выходом.


Ок так и поступил другого выхода не нашел.
Написал функцию:
Код

def changekey(d):
  oldkey = raw_input("Enter old key:")  # читаем имя старого ключа
  newkey = raw_input("Enter new key:") # читаем имя нового ключа
  tmp = d[oldkey] # сохраняем все значение старого ключа
  d.pop(oldkey) # удаляем ключ и его значения
  d[newkey] = tmp # вносим новый ключ со старами значениями


Функция изменяет только ключи типа str, вот её более лучший вариант для str и int:
Код

def changekey(d):
    oldkey = raw_input("Enter old key:")  
    inpt = raw_input("Convert to int (y/n) ?")
    if inpt == 'y':  # если нужно конвертить старый ключ в int то входим в if
        try:
            oldkey = int(oldkey)
        except:
            print "Error: Check your input!"
    
    newkey = raw_input("Enter new key:") # читаем новый ключ
    inpt = raw_input("Convert to int (y/n) ?")
    if inpt == 'y': # если нужно конвертить новый ключ в int то входим в if
        try:
            newkey = int(newkey)
        except:
            print "Error: Check your input!"
    tmp = d[oldkey] # сохраняем значения старого ключа
    d.pop(oldkey) # удаляем старый ключ с его значениями
    d[newkey] = tmp # добавляем в словарь новый ключ со старами значениями


Спасибо всем за ответы вопрос решен !

Автор: lorien 7.7.2007, 23:24
Код

>>> foo = {'bar':'baz'}
>>> foo
{'bar': 'baz'}
>>> foo['bobr'] = foo.pop('bar')
>>> foo
{'bobr': 'baz'}

Тока не забывайте, что в словаре гарантированно уникальны только ключи, а значения могут повторяться

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)