Alterar o nome de uma chave no dicionário


Respostas:


715

Facilmente feito em 2 etapas:

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

Ou em uma etapa:

dictionary[new_key] = dictionary.pop(old_key)

que aumentará KeyErrorse não dictionary[old_key]for definido. Observe que isso será excluído 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
Isso vai levantar uma ou outra maneira KeyError se a chave não é existente, mas você pode usar dict[new_value] = dict.pop(old_value, some_default_value)para evitar que
Tobias KIENZLER

2
Observe que isso também afetaria a posição da chave no CPython 3.6+ / Pypy e Python 3.7+. Em geral, a posição de old_keyserá diferente da posição de new_key.
norok2 24/01

63

se você deseja alterar todas as chaves:

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}

se você quiser alterar uma tecla: você pode seguir qualquer uma das sugestões acima.


3
Isso cria um novo dicionário, em vez de atualizar um existente - o que pode não ser importante, mas não é o que foi solicitado.
martineau

15
Mesma resposta com compreensão de dicionário:{ d1[key] : value for key, value in d.items() }
Morwenn 19/06/2013

35

pop'n'fresh

>>>a = {1:2, 3:4}
>>>a[5] = a.pop(1)
>>>a
{3: 4, 5: 2}
>>> 

26

No python 2.7 e superior, você pode usar a compreensão do dicionário: Este é um exemplo que encontrei ao ler um CSV usando um DictReader. O usuário havia sufixado todos os nomes de coluna com ':'

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

para se livrar do ':' à direita nas chaves:

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


"AttributeError: o objeto 'dict' não possui atributo 'replace'" "
user1318135 12/07/16

2
user1318125, sugiro tentar copiar e colar. Isso funciona para mim no console python (o .replace está sendo executado na string usada como chave)
north.mister

7

Como as chaves são o que os dicionários usam para pesquisar valores, você não pode realmente alterá-los. O mais próximo que você pode fazer é salvar o valor associado à chave antiga, excluí-la e adicionar uma nova entrada com a chave de substituição e o valor salvo. Várias das outras respostas ilustram maneiras diferentes de conseguir isso.


5

Se você tem um ditado complexo, significa que há um ditado ou lista dentro do ditado:

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

Não há maneira direta de fazer isso, mas você pode excluir, depois atribuir

d = {1:2,3:4}

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

ou faça alterações de chave em massa:

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

2
d = { changeKey(k): v for k, v in d.items()}
Erich

4

Para converter todas as chaves no dicionário

Suponha que este seja o seu dicionário:

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

Para converter todos os traços em sublinhados na chave do dicionário de exemplo:

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

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

suponha que desejamos mudar as chaves para os elementos da lista p = ['a', 'b']. o seguinte código fará:

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

e chegamos

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

0

Você pode associar o mesmo valor a muitas chaves ou apenas remover uma chave e adicionar novamente uma nova chave com o mesmo valor.

Por exemplo, se você tiver chaves-> valores:

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

não há motivo para você não poder adicionar purple->2ou remover red->1e adicionarorange->1


0

Em caso de alteração de todas as teclas de uma só vez. Aqui estou mostrando as chaves.

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

Eu não vi essa resposta exata:

dict['key'] = value

Você pode até fazer isso para atribuir objetos. Transforme-os em um dicionário, fazendo o seguinte:

dict = vars(obj)

Em seguida, você pode manipular os atributos do objeto como faria em um dicionário:

dict['attribute'] = value

11
Não estou vendo como isso está relacionado à questão; você poderia por favor elaborar?
Apraetor
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.