Maison >développement back-end >Tutoriel Python >Comment puis-je aplatir un dictionnaire imbriqué et compresser ses clés en Python ?

Comment puis-je aplatir un dictionnaire imbriqué et compresser ses clés en Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-31 06:01:13574parcourir

How Can I Flatten a Nested Dictionary and Compress Its Keys in Python?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn