Manipuler des dictionnaires python avec des attributs plutôt que des crochets

J’utilise très souvent des dictionnaires (autrement appelés maps ou objects selon les langages) dans mon code de tous les jours. Et parfois, en python, c’est assez fastidieux de manipuler des dictionnaires, d’autant plus s’ils en contiennent d’autres. Ça fait rapidement un enchaînement de notations de type some_dict['key_name']['inner_property']['leaf_node_key']. Pas très élégant.

J’ai aujourd’hui trouvé une lib qui va me faciliter la vie!

Ce que je cherchais depuis un moment, c’était une façon simple d’accéder aux valeurs de mon dictionnaire à la façon de ce qu’on fait en JavaScript, comme un attribut. J’avais bricolé une classe (je l’avais même fait plusieurs fois, sur différents projets, dans différentes vies), avec des surcharges des méthodes __getattr__, voire __setattr__ (voir cette page de la doc python pour comprendre de quoi je parle).

Là, j’ai vraiment trouvé un code compact et élégant qui couvre bien tous les cas et fait ce que je veux. C’est parfait!

Voyez plutôt cet exemple:

import munch
json_character = {
    'name':'Munchor the Barbarian',
    'level':15, 'charisma':4, 'strength':12,
    'weapons':[
        {'name':'Mourning Bladder', 'type':'internal organ', 'damage':6},
        {'name':'BFG 8999.99', 'type':'plasma caster', 'damage':50},
    ]
}
character = munch.munchify(json_character)
print(character.name, character.level)
print('Weapons in backpack:', ','.join(w.name for w in character.weapons))

Pour l’installer, rien de plus simple: pip install munch

La page officielle est ici: https://pypi.org/project/munch/.

EDIT: j’avais originellement écrit l’article pour la lib bunch mais elle n’est plus maintenue depuis un moment. J’ai changé les références vers munch qui est un fork plus à jour, avec les mêmes fonctionnalités.

Vous aimerez aussi...

Laisser un commentaire