Змініть ім'я ключа в словнику


Відповіді:


715

Легко робиться в 2 кроки:

dictionary[new_key] = dictionary[old_key]
del dictionary[old_key]

Або в 1 крок:

dictionary[new_key] = dictionary.pop(old_key)

який підніметься, KeyErrorякщо dictionary[old_key]не визначено. Зауважте, що це буде видалено dictionary[old_key].

>>> dictionary = { 1: 'one', 2:'two', 3:'three' }
>>> dictionary['ONE'] = dictionary.pop(1)
>>> dictionary
{2: 'two', 3: 'three', 'ONE': 'one'}
>>> dictionary['ONE'] = dictionary.pop(1)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 1

59
Це призведе до виникнення KeyError в будь-якому випадку, якщо ключ не існує, але ви можете скористатися, dict[new_value] = dict.pop(old_value, some_default_value)щоб уникнути цього
Tobias Kienzler

2
Зауважте, що це також вплине на положення ключа в CPython 3.6+ / Pypy та Python 3.7+. Тобто загалом позиція old_keyбуде відрізнятися від позиції new_key.
norok2

63

якщо ви хочете змінити всі клавіші:

d = {'x':1, 'y':2, 'z':3}
d1 = {'x':'a', 'y':'b', 'z':'c'}

In [10]: dict((d1[key], value) for (key, value) in d.items())
Out[10]: {'a': 1, 'b': 2, 'c': 3}

якщо ви хочете змінити одну клавішу: Ви можете перейти до будь-якої з вищевказаних пропозицій.


3
Це створює новий словник, а не оновлення існуючого, що може бути не важливо, але це не те, що було запропоновано.
мартино

15
Та сама відповідь із розумінням словника:{ d1[key] : value for key, value in d.items() }
Морвен


26

У python 2.7 та новіших версіях ви можете використовувати розуміння словника. Це приклад, з яким я стикався під час читання CSV за допомогою DictReader. Користувач суфіксував усі назви стовпців з ':'

ori_dict = {'key1:' : 1, 'key2:' : 2, 'key3:' : 3}

щоб позбутися від останнього ":" в ключах:

corrected_dict = { k.replace(':', ''): v for k, v in ori_dict.items() }


"AttributeError:" dict "об'єкт не має атрибута" заміна ""
user1318135

2
user1318125, я б запропонував спробувати скопіювати пасту. Це працює для мене в консолі python (.replace виконується на рядку, який використовується як ключ)
north.mister

7

Оскільки ключі - це те, що словники використовують для пошуку значень, ви не можете їх реально змінити. Найближче, що ви можете зробити, це зберегти значення, пов’язане зі старим ключем, видалити його, а потім додати новий запис за допомогою ключа заміни та збереженого значення. Кілька інших відповідей ілюструють різні способи цього досягти.


5

Якщо у вас складний дикт, це означає, що в диктаті є дикт або список:

myDict = {1:"one",2:{3:"three",4:"four"}}
myDict[2][5] = myDict[2].pop(4)
print myDict

Output
{1: 'one', 2: {3: 'three', 5: 'four'}}

4

Немає прямого способу зробити це, але ви можете видалити-потім-призначити

d = {1:2,3:4}

d[newKey] = d[1]
del d[1]

або зміни масових ключів:

d = dict((changeKey(k), v) for k, v in d.items())

2
d = { changeKey(k): v for k, v in d.items()}
Еріх

4

Для перетворення всіх ключів у словнику

Припустимо, це ваш словник:

>>> sample = {'person-id': '3', 'person-name': 'Bob'}

Щоб перетворити всі тире в підкреслення в зразковому словниковому ключі:

>>> sample = {key.replace('-', '_'): sample.pop(key) for key in sample.keys()}
>>> sample
>>> {'person_id': '3', 'person_name': 'Bob'}

3
d = {1:2,3:4}

припустимо, що ми хочемо змінити ключі до елементів списку p = ['a', 'b']. буде виконано наступний код:

d=dict(zip(p,list(d.values()))) 

і ми отримуємо

{'a': 2, 'b': 4}

0

Ви можете пов’язати одне і те ж значення з багатьма клавішами або просто видалити ключ і знову додати новий ключ з тим же значенням.

Наприклад, якщо у вас є значення ключів->:

red->1
blue->2
green->4

немає жодної причини ви не можете додавати purple->2або видаляти red->1та додаватиorange->1


0

У разі зміни відразу всіх клавіш. Ось я стримую ключі.

a = {'making' : 1, 'jumping' : 2, 'climbing' : 1, 'running' : 2}
b = {ps.stem(w) : a[w] for w in a.keys()}
print(b)
>>> {'climb': 1, 'jump': 2, 'make': 1, 'run': 2} #output

-3

Я не бачив такої точної відповіді:

dict['key'] = value

Ви навіть можете це зробити для об’єктів атрибутів. Складіть їх у словник, зробивши це:

dict = vars(obj)

Тоді ви можете маніпулювати атрибутами об'єктів, як і словником:

dict['attribute'] = value

1
Я не бачу, як це пов’язано з питанням; Ви можете, будь ласка, докладно?
apraetor
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.