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
Libérer: 2024-12-16 02:24:10
original
820 Les gens l'ont consulté

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]}
Copier après la connexion

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]}
Copier après la connexion

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)
Copier après la connexion

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}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal