Gestion des attributs épars dans une structure arborescente (Python)

Introduction [^ 1]

[^ 1]: Un mémo quand j'oublie

Une donnée (par exemple, commis) a une structure arborescente (commis de service) et a divers attributs (par exemple, chef de service, chef de section, commis). Explique comment définir et utiliser les attributs dans les groupes (par exemple, les départements et les sections).

Aperçu

Définissez et utilisez deux types d'informations: une ** configuration ** arborescente et un attribut (** nom **).

Données d'origine (TOML)

import re, toml
toml._groupname_re = re.compile('^[A-Za-z0-9-Hmm--Un-龥_*-]+$')

tml = toml.loads("""\
[Constitution.Partie A]
Section L="Commis X,Commis Y"
Coupe M="Commis Z"
[Constitution.Partie B]
Section N="Commis W"

[Nom.Partie A]
Réalisateur="Monsieur A"
[Nom.Partie A.Section L]
Directeur="M. L"
[Nom.Partie A.Section L.Commis X]
Chef="M. X"
[Nom.Partie A.Section L.Commis Y]
Chef="Monsieur Y"
[Nom.Partie A.Coupe M]
Directeur="M. M"
[Nom.Partie A.Coupe M.Commis Z]
Chef="M. Z"
[Nom.Partie B]
Réalisateur="Monsieur B"
[Nom.Partie B.Section N]
Directeur="Monsieur N"
[Nom.Partie B.Section N.Commis W]
Chef="Monsieur W"
""")

tml['Constitution']
>>>
{'Partie A': {'Section L': 'Commis X,Commis Y',
         'Coupe M': 'Commis Z'},
 'Partie B': {'Section N': 'Commis W'}}

tml['Nom']
>>>
{'Partie A': {'Section L': {'Commis X': {'Chef': 'M. X'},
                 'Commis Y': {'Chef': 'Monsieur Y'},
               'Directeur': 'M. L'},
         'Coupe M': {'Commis Z': {'Chef': 'M. Z'},
               'Directeur': 'M. M'},
       'Réalisateur': 'Monsieur A'},
 'Partie B': {'Section N': {'Commis W': {'Chef': 'Monsieur W'},
               'Directeur': 'Monsieur N'},
       'Réalisateur': 'Monsieur B'}}

Création des données de configuration

Créez des données de configuration à l'aide de ortoolpy.MultiKeyDict. Si vous bouclez avec for, vous pouvez accéder à toutes les données (toutes liées). Notez que MultiKeyDict est mis en cache et ne peut pas être mis à jour. (En supposant qu'il est lu en premier comme les informations de réglage et ne change pas)

from ortoolpy import MultiKeyDict
iskey = lambda x: x[-1] in 'Commis de département' # 'Commis de département'Changer la clé se terminant par en un nouveau MultiKeyDict
conv = lambda x: ((s,None) for s in x.split(','))
Constitution= MultiKeyDict(tml['Constitution'], iskey=iskey, conv=conv, extend=True)
pour ky en configuration:
    print(ky)
>>>
('Partie A', 'Section L', 'Commis X')
('Partie A', 'Section L', 'Commis Y')
('Partie A', 'Coupe M', 'Commis Z')
('Partie B', 'Section N', 'Commis W')

Confirmation des données d'attribut

Créez des données d'attribut (nom) avec MultiKeyDict et accédez en utilisant les données de configuration comme clé.

Nom= MultiKeyDict(tml['Nom'], iskey=iskey)
pour ky en configuration:
    print(' '.join(ky))
    for ky2,nom en nom[ky].items():
        print(f' %s: %s'%(ky2[-1],name))
>>>
Département A, Section L, Section X
Réalisateur:Monsieur A
Directeur:M. L
Chef:M. X
Département A Section L Section Y Section
Réalisateur:Monsieur A
Directeur:M. L
Chef:Monsieur Y
Département A M Section Z Section
Réalisateur:Monsieur A
Directeur:M. M
Chef:M. Z
Département B Section N Section W Section
Réalisateur:Monsieur B
Directeur:Monsieur N
Chef:Monsieur W

Autrement

pour ky en configuration:
    print(' '.join(ky))
    dc =Nom.get_list(ky, True)
    print(f'Réalisateur: %s'%dc['Réalisateur'][0])
    print(f'Directeur: %s'%dc['Directeur'][0])
    print(f'Chef: %s'%dc['Chef'][0])
>>>
Département A, Section L, Section X
Réalisateur:Monsieur A
Directeur:M. L
Chef:M. X
Département A Section L Section Y Section
Réalisateur:Monsieur A
Directeur:M. L
Chef:Monsieur Y
Département A M Section Z Section
Réalisateur:Monsieur A
Directeur:M. M
Chef:M. Z
Département B Section N Section W Section
Réalisateur:Monsieur B
Directeur:Monsieur N
Chef:Monsieur W

Comme indiqué ci-dessous, le responsable défini dans [Nom.Un département] est également "Nom.A Département.L Section.X Section" ou [Nom.A Département.L Section.Y Section] "Manager =" M. A "". J'ai pu m'y référer.

[Nom.Partie A] Directeur = "M. A"

De cette façon, vous pouvez obtenir l'attribut à partir des données de fin (participant) sans vous soucier de l'endroit où l'attribut a été défini dans l'arborescence.

c'est tout

Recommended Posts

Gestion des attributs épars dans une structure arborescente (Python)
python> Gestion des tableaux 2D
Manipulation de python sur mac
Gestion des fichiers JSON en Python
Gestion des erreurs Python
Les bases de Python ①
Bases de python ①
Gestion des exceptions Python
Copie de python
Gestion des fuseaux horaires Python
Gestion des exceptions Python
Introduction de Python
Comment spécifier des attributs avec Mock of Python
[Python] Chapitre 02-02 Bases des programmes Python (gestion des chaînes de caractères)
[Python] Chapitre 02-06 <Supplement> Bases des programmes Python (gestion des valeurs numériques)
[Python] Opération d'énumération
Liste des modules python
Manipuler yaml avec python
Unification de l'environnement Python
Copie des préférences python
Manipulation de json en python
Principes de base du grattage Python
[python] comportement d'argmax
Utilisation des locaux Python ()
le zen de Python
Installation de Python 3.3 rc1
Python, à propos de la gestion des exceptions
Gestion des points décimaux Python
# 4 [python] Bases des fonctions
Comment gérer l'hexadécimal en Python3
Analyse du squelette de plan avec Python (4) Gestion du déplacement forcé
Connaissance de base de Python
Anecdotes sobres de python3
Résumé des arguments Python
Bases de python: sortie
Installation de matplotlib (Python 3.3.2)
Application de Python 3 vars
Divers traitements de Python
Remarques sur la gestion de grandes quantités de données avec python + pandas
Comparaison de la gestion des trames de données en Python (pandas), R, Pig
[Python] Utilisation correcte de la carte
Gestion des exceptions Python (mémo d'apprentissage Python ⑥)
Gestion des chemins absolus de os.path.join
Vers la retraite de Python2
résumé lié à l'opération de fichier python
Résumé des opérations de liste Python3
Python - Démarrage rapide de la journalisation
Recommandation de la bibliothèque binpacking de python
[python] Valeur de l'objet fonction (?)
Gestion des devis en [bash]
Mise à jour automatique du module Python
Python - Vérifiez le type de valeurs
[Python] L'origine du nom de la fonction python
Gestion des matrices clairsemées dans Scipy
Analyse statique des programmes Python
À propos de divers encodages de Python 3
Jugement d'équivalence d'objet en Python
Introduction d'activités appliquant Python