Aplatissement des dictionnaires imbriqués avec des clés compressées
Considérons une structure de dictionnaire hiérarchique comme celle ci-dessous :
{'a': 1, 'c': {'a': 2, 'b': {'x': 5, 'y' : 10}}, 'd': [1, 2, 3]}
Pour aplatissez-le dans une structure simplifiée comme :
{'a': 1, 'c_a': 2, 'c_b_x': 5, 'c_b_y': 10, 'd': [1, 2, 3]}
implique l'aplatissement à la fois de la liste imbriquée et des dictionnaires imbriqués à l'intérieur.
Approche
Cette procédure est parallèle aux étapes d'aplatissement d'un liste imbriquée. Cependant, cela nécessite un traitement supplémentaire pour parcourir le dictionnaire, générer des noms de clés uniques pour la structure aplatie à l'aide d'un séparateur et assembler le nouveau dictionnaire.
Implémentation
Utilisation collections.abc.MutableMapping pour la vérification du type de dictionnaire, l'extrait de code suivant utilise la récursivité pour parcourir la structure imbriquée et construire le fichier compressé. représentation :
from collections.abc import MutableMapping def flatten(dictionary, parent_key='', separator='_'): items = [] for key, value in dictionary.items(): new_key = parent_key + separator + key if parent_key else key if isinstance(value, MutableMapping): items.extend(flatten(value, new_key, separator=separator).items()) else: items.append((new_key, value)) return dict(items)
L'application de cette méthode à l'exemple de dictionnaire donné produit la représentation aplatie souhaitée :
>>> flatten({'a': 1, 'c': {'a': 2, 'b': {'x': 5, 'y' : 10}}, 'd': [1, 2, 3]}) {'a': 1, 'c_a': 2, 'c_b_x': 5, 'd': [1, 2, 3], 'c_b_y': 10}
Cette technique aplatit efficacement les dictionnaires imbriqués en compressant les noms de clés à l'aide d'un séparateur, fournissant une structure compacte et facilement traversable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!