0

j'ai un dictionnaire avec une liste dans ce qui ressemble à ceci:fusion de dictionnaires avec la même clé et les valeurs dans un seul dictionnaire

{"items":[{"number":"98", "items": {"code": "X", "color": "Red"}},{"number":"98", "items": {"code": "Y", "color": "Blue"}},{"number":"62", "items": {"code": "B", "color": "Green"}}{"number":"62", "items": {"code": "A", "color": "Yellow"}}]} 

Est-il possible que je pouvais fusionner les éléments de chaque « numéro » qui correspondent par des valeurs ensemble dans une liste comme ça?

{"items":[{"number":"98","items":[{"code":"X","color":"Red"}, {"code": "Y","color":"Blue"}]}, {"number":"62", "items": [{"code": "B", "color": "Green"},{"code": "A", "color":"Yellow"}]}]} 

Répondre

0

La meilleure façon que je pouvais penser d'y arriver est de trier tous les « éléments » dans un dictionnaire intermédiaire, regroupés par le « nombre ». De là, transformer le dictionnaire en sortie désirée est trivial.

inp = {"items":[{"number":"98", "items": {"code": "X", "color": "Red"}},{"number":"98", "items": {"code": "Y", "color": "Blue"}},{"number":"62", "items": {"code": "B", "color": "Green"}},{"number":"62", "items": {"code": "A", "color": "Yellow"}}]} 
d = dict() 
for i in inp['items']: 
    d[i['number']] = d.get(i['number'], list()) + [i['items']] 
out = {'items': [{'number': n, 'items': d[n]} for n in d.keys()]} 

Sortie:

{'items': [{'number': '98', 'items': [{'code': 'X', 'color': 'Red'}, {'code': 'Y', 'color': 'Blue'}]}, {'number': '62', 'items': [{'code': 'B', 'color': 'Green'}, {'code': 'A', 'color': 'Yellow'}]}]} 
+0

Wow, c'est exactement ce que je avais besoin merci beaucoup! J'ai essayé de comprendre cela pour la dernière heure. Je pense que je devrais me pencher un peu plus sur ce sujet. –