3 votes

Affectation de valeurs d'un dictionnaire à un objet

Très souvent, j'ai besoin de faire quelque chose comme ceci :

"Un dictionnaire avec des valeurs obtenues d'une certaine manière (par exemple, des valeurs de formulaire soumises)"
my_dict = {
    'nom': 'Jean',
    'prenom': 'Dubois',
    'age': 27,
    'couleur_des_cheveux': 'vert',
}

"L'objet personne est une instance de la classe représentant une personne"
person.name = my_dict['nom']
person.surname = my_dict['prenom']
person.age = my_dict['age']
person.hair_color = my_dict['couleur_des_cheveux']

Je pense que c'est beaucoup de répétition. Quelle approche utilisez-vous ?

8voto

Andrew Clark Points 77748
for attr, val in my_dict.items():
    setattr(person, attr, val)

Si my_dict pourrait contenir des clés que vous ne souhaitez pas copier dans person, créez une liste des clés que vous souhaitez copier et faites quelque chose comme ceci :

key_list = ['name', 'surname', 'age', 'hair_color']
for attr in key_list:
    setattr(person, attr, my_dict[attr])

1voto

Ashwini Chaudhary Points 94431

Comme les attributs d'une instance peuvent être accédés via un dictionnaire, utilisez instance.__dict__:

>>> for item in my_dict:
        person.__dict__[item]=my_dict[item]

0voto

Benedict Points 1228

Il existe déjà une très bonne FAQ pour cela : Comment créer des objets à la volée en python ?

Dans votre cas :

personne = type('Personne', (objet,), mon_dict)
imprimer personne.nom

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X