Maison >développement back-end >Tutoriel Python >Comment aplatir des dictionnaires imbriqués avec des clés compressées en Python ?

Comment aplatir des dictionnaires imbriqués avec des clés compressées en Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-16 02:24:10820parcourir

How to Flatten Nested Dictionaries with Compressed Keys in Python?

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!

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