Je veux changer la clé d'une entrée dans un dictionnaire Python.
Existe-t-il un moyen simple de procéder?
Je veux changer la clé d'une entrée dans un dictionnaire Python.
Existe-t-il un moyen simple de procéder?
Réponses:
Facile à réaliser en 2 étapes:
dictionary[new_key] = dictionary[old_key]
del dictionary[old_key]
Ou en 1 étape:
dictionary[new_key] = dictionary.pop(old_key)
qui augmentera KeyError
si dictionary[old_key]
n'est pas défini. Notez que cela va supprimer 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
dict[new_value] = dict.pop(old_value, some_default_value)
pour éviter cela
old_key
sera différente de la position de new_key
.
si vous voulez changer toutes les clés:
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}
si vous souhaitez modifier une seule touche: vous pouvez suivre l'une des suggestions ci-dessus.
{ d1[key] : value for key, value in d.items() }
En python 2.7 et supérieur, vous pouvez utiliser la compréhension du dictionnaire: Ceci est un exemple que j'ai rencontré lors de la lecture d'un CSV à l'aide d'un DictReader. L'utilisateur avait suffixé tous les noms de colonne avec ':'
ori_dict = {'key1:' : 1, 'key2:' : 2, 'key3:' : 3}
se débarrasser de la fin «:» dans les touches:
corrected_dict = { k.replace(':', ''): v for k, v in ori_dict.items() }
Étant donné que les clés sont ce que les dictionnaires utilisent pour rechercher des valeurs, vous ne pouvez pas vraiment les modifier. La chose la plus proche que vous pouvez faire est d'enregistrer la valeur associée à l'ancienne clé, de la supprimer, puis d'ajouter une nouvelle entrée avec la clé de remplacement et la valeur enregistrée. Plusieurs des autres réponses illustrent différentes manières d'y parvenir.
Pour convertir toutes les clés du dictionnaire
Supposons que ce soit votre dictionnaire:
>>> sample = {'person-id': '3', 'person-name': 'Bob'}
Pour convertir tous les tirets en traits de soulignement dans l'exemple de clé de dictionnaire:
>>> sample = {key.replace('-', '_'): sample.pop(key) for key in sample.keys()}
>>> sample
>>> {'person_id': '3', 'person_name': 'Bob'}
d = {1:2,3:4}
supposons que nous voulons changer les clés des éléments de liste p = ['a', 'b']. le code suivant fera:
d=dict(zip(p,list(d.values())))
et nous obtenons
{'a': 2, 'b': 4}
Vous pouvez associer la même valeur à plusieurs clés, ou simplement supprimer une clé et rajouter une nouvelle clé avec la même valeur.
Par exemple, si vous avez des clés-> valeurs:
red->1
blue->2
green->4
il n'y a aucune raison pour que vous ne puissiez pas ajouter purple->2
ou supprimer red->1
et ajouterorange->1
En cas de changement de toutes les clés à la fois. Ici, j'enfonce les clés.
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
Je n'ai pas vu cette réponse exacte:
dict['key'] = value
Vous pouvez même le faire pour les attributs d'objet. Faites-en un dictionnaire en procédant comme suit:
dict = vars(obj)
Ensuite, vous pouvez manipuler les attributs d'objet comme vous le feriez pour un dictionnaire:
dict['attribute'] = value