Aplatissement des dictionnaires imbriqués avec compression de touches
Lorsque vous travaillez avec des structures de données complexes dans votre code, il peut souvent être utile de les « aplatir » pour une manipulation plus facile. Cela est particulièrement vrai pour les dictionnaires imbriqués, où plusieurs niveaux de clés et de valeurs peuvent ajouter de la complexité à vos opérations. Dans cet article, nous allons explorer comment aplatir un dictionnaire imbriqué tout en compressant les clés.
Le problème
Considérez le dictionnaire imbriqué suivant :
{'a': 1, 'c': {'a': 2, 'b': {'x': 5, 'y': 10}}, 'd': [1, 2, 3]}
Le but est d'aplatir ce dictionnaire en quelque chose comme :
{'a': 1, 'c_a': 2, 'c_b_x': 5, 'c_b_y': 10, 'd': [1, 2, 3]}
où les clés imbriquées sont compressées pour créer une clé unique et aplatie.
La solution
Pour aplatir le dictionnaire imbriqué, nous pouvons utiliser la fonction flatten() du module collections.abc. Cette fonction peut être définie comme suit :
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)
Utilisation de la fonction
Pour utiliser la fonction flatten(), transmettez simplement le dictionnaire imbriqué en argument. La fonction parcourra récursivement le dictionnaire, en l'"aplatissant" et en compressant les clés.
>>> 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}
Comme vous pouvez le voir, le dictionnaire aplati a un seul niveau de clés, les clés étant compressées pour incorporer l'imbrication. structure du dictionnaire original.
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!