{"id":1457,"date":"2020-04-15T15:27:16","date_gmt":"2020-04-15T13:27:16","guid":{"rendered":"https:\/\/saladtomatonion.com\/blog\/?p=1457"},"modified":"2020-05-28T09:25:25","modified_gmt":"2020-05-28T07:25:25","slug":"manipuler-des-dictionnaires-python-avec-des-attributs-plutot-que-des-crochets","status":"publish","type":"post","link":"https:\/\/saladtomatonion.com\/blog\/2020\/04\/15\/manipuler-des-dictionnaires-python-avec-des-attributs-plutot-que-des-crochets\/","title":{"rendered":"Manipuler des dictionnaires python avec des attributs plut\u00f4t que des crochets"},"content":{"rendered":"\n<p>J&rsquo;utilise tr\u00e8s souvent des dictionnaires (autrement appel\u00e9s maps ou objects selon les langages) dans mon code de tous les jours. Et parfois, en python, c&rsquo;est assez fastidieux de manipuler des dictionnaires, d&rsquo;autant plus s&rsquo;ils en contiennent d&rsquo;autres. \u00c7a fait rapidement un encha\u00eenement de notations de type <code>some_dict['key_name']['inner_property']['leaf_node_key']<\/code>. Pas tr\u00e8s \u00e9l\u00e9gant.<\/p>\n\n\n\n<p>J&rsquo;ai aujourd&rsquo;hui trouv\u00e9 une lib qui va me faciliter la vie!<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Ce que je cherchais depuis un moment, c&rsquo;\u00e9tait une fa\u00e7on simple d&rsquo;acc\u00e9der aux valeurs de mon dictionnaire \u00e0 la fa\u00e7on de ce qu&rsquo;on fait en JavaScript, comme un attribut. J&rsquo;avais bricol\u00e9 une classe (je l&rsquo;avais m\u00eame fait plusieurs fois, sur diff\u00e9rents projets, dans diff\u00e9rentes vies), avec des surcharges des m\u00e9thodes <code>__getattr__<\/code>, voire <code>__setattr__<\/code> (voir <a rel=\"noreferrer noopener\" aria-label=\"cette page de la doc python (opens in a new tab)\" href=\"https:\/\/docs.python.org\/3\/reference\/datamodel.html#object.__getattr__\" target=\"_blank\">cette page de la doc python<\/a> pour comprendre de quoi je parle).<\/p>\n\n\n\n<p> L\u00e0, j&rsquo;ai vraiment trouv\u00e9 un code compact et \u00e9l\u00e9gant qui couvre bien tous les cas et fait ce que je veux. C&rsquo;est parfait!<\/p>\n\n\n\n<p>Voyez plut\u00f4t cet exemple:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; auto-links: false; title: ; notranslate\" title=\"\">\nimport munch\njson_character = {\n    'name':'Munchor the Barbarian',\n    'level':15, 'charisma':4, 'strength':12,\n    'weapons':&#91;\n        {'name':'Mourning Bladder', 'type':'internal organ', 'damage':6},\n        {'name':'BFG 8999.99', 'type':'plasma caster', 'damage':50},\n    ]\n}\ncharacter = munch.munchify(json_character)\nprint(character.name, character.level)\nprint('Weapons in backpack:', ','.join(w.name for w in character.weapons))\n<\/pre><\/div>\n\n\n<p>Pour l&rsquo;installer, rien de plus simple: <code>pip install munch<\/code><\/p>\n\n\n\n<p>La page officielle est ici: <a href=\"https:\/\/pypi.org\/project\/munch\/\">https:\/\/pypi.org\/project\/munch\/<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large\"><img decoding=\"async\" src=\"https:\/\/saladtomatonion.com\/blog\/wp-content\/uploads\/2020\/05\/4105934-document-edit-edit-document-update-write-writing_113937.svg\" alt=\"\" class=\"wp-image-1467\"\/><\/figure><\/div>\n\n\n\n<p><strong>EDIT<\/strong>: j&rsquo;avais originellement \u00e9crit l&rsquo;article pour la lib <code>bunch<\/code> mais elle n&rsquo;est plus maintenue depuis un moment. J&rsquo;ai chang\u00e9 les r\u00e9f\u00e9rences vers <code>munch<\/code> qui est un fork plus \u00e0 jour, avec les m\u00eames fonctionnalit\u00e9s.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;utilise tr\u00e8s souvent des dictionnaires (autrement appel\u00e9s maps ou objects selon les langages) dans mon code de tous les jours. Et parfois, en python, c&rsquo;est assez fastidieux de manipuler des dictionnaires, d&rsquo;autant plus s&rsquo;ils&#46;&#46;&#46;<\/p>\n","protected":false},"author":2,"featured_media":1458,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[4],"tags":[345,344,206,346,21,254,38],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/saladtomatonion.com\/blog\/wp-content\/uploads\/2020\/04\/Capture-d\u2019e\u0301cran-2020-04-15-a\u0300-15.13.21.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/posts\/1457"}],"collection":[{"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/comments?post=1457"}],"version-history":[{"count":5,"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/posts\/1457\/revisions"}],"predecessor-version":[{"id":1470,"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/posts\/1457\/revisions\/1470"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/media\/1458"}],"wp:attachment":[{"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/media?parent=1457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/categories?post=1457"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/saladtomatonion.com\/blog\/wp-json\/wp\/v2\/tags?post=1457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}