Umgang mit spärlichen Attributen in einer Baumstruktur (Python)

Einleitung [^ 1]

[^ 1]: Ein Memo, wenn ich es vergesse

Ein Datenelement (z. B. Sachbearbeiter) hat eine Baumstruktur (Abteilungsmitarbeiter) und verschiedene Attribute (z. B. Abteilungsleiter, Abteilungsleiter, Sachbearbeiter). Erklärt, wie Attribute in Gruppen festgelegt und verwendet werden (z. B. Abteilungen und Abschnitte).

Überblick

Definieren und verwenden Sie zwei Arten von Informationen: eine baumstrukturierte ** Konfiguration ** und ein Attribut (** Name **).

Originaldaten (TOML)

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

tml = toml.loads("""\
[Verfassung.Teil A.]
Abschnitt L.="X Angestellter,Y Angestellter"
Abschnitt M.="Z Angestellter"
[Verfassung.Teil B.]
Abschnitt N.="W Angestellter"

[Name.Teil A.]
Direktor="Herr A."
[Name.Teil A..Abschnitt L.]
Manager="Herr L."
[Name.Teil A..Abschnitt L..X Angestellter]
Chef="Herr X"
[Name.Teil A..Abschnitt L..Y Angestellter]
Chef="Herr Y."
[Name.Teil A..Abschnitt M.]
Manager="Herr M."
[Name.Teil A..Abschnitt M..Z Angestellter]
Chef="Herr Z."
[Name.Teil B.]
Direktor="Herr B."
[Name.Teil B..Abschnitt N.]
Manager="Herr N."
[Name.Teil B..Abschnitt N..W Angestellter]
Chef="Herr W."
""")

tml['Verfassung']
>>>
{'Teil A.': {'Abschnitt L.': 'X Angestellter,Y Angestellter',
         'Abschnitt M.': 'Z Angestellter'},
 'Teil B.': {'Abschnitt N.': 'W Angestellter'}}

tml['Name']
>>>
{'Teil A.': {'Abschnitt L.': {'X Angestellter': {'Chef': 'Herr X'},
                 'Y Angestellter': {'Chef': 'Herr Y.'},
               'Manager': 'Herr L.'},
         'Abschnitt M.': {'Z Angestellter': {'Chef': 'Herr Z.'},
               'Manager': 'Herr M.'},
       'Direktor': 'Herr A.'},
 'Teil B.': {'Abschnitt N.': {'W Angestellter': {'Chef': 'Herr W.'},
               'Manager': 'Herr N.'},
       'Direktor': 'Herr B.'}}

Erstellung von Konfigurationsdaten

Erstellen Sie Konfigurationsdaten mit ortoolpy.MultiKeyDict. Wenn Sie eine Schleife mit for ausführen, können Sie auf alle Daten zugreifen (alle zugehörigen). Beachten Sie, dass MultiKeyDict zwischengespeichert ist und nicht aktualisiert werden kann. (Vorausgesetzt, es wird zuerst wie die Einstellungsinformationen gelesen und ändert sich nicht)

from ortoolpy import MultiKeyDict
iskey = lambda x: x[-1] in 'Abteilungsleiter' # 'Abteilungsleiter'Ändern Sie den Schlüssel, der mit endet, in einen neuen MultiKeyDict
conv = lambda x: ((s,None) for s in x.split(','))
Verfassung= MultiKeyDict(tml['Verfassung'], iskey=iskey, conv=conv, extend=True)
für ky in der Konfiguration:
    print(ky)
>>>
('Teil A.', 'Abschnitt L.', 'X Angestellter')
('Teil A.', 'Abschnitt L.', 'Y Angestellter')
('Teil A.', 'Abschnitt M.', 'Z Angestellter')
('Teil B.', 'Abschnitt N.', 'W Angestellter')

Bestätigung der Attributdaten

Erstellen Sie Attributdaten (Name) mit MultiKeyDict und greifen Sie mit den Konfigurationsdaten als Schlüssel zu.

Name= MultiKeyDict(tml['Name'], iskey=iskey)
für ky in der Konfiguration:
    print(' '.join(ky))
    for ky2,Name im Namen[ky].items():
        print(f' %s: %s'%(ky2[-1],name))
>>>
Abteilung A, Abschnitt L, Abschnitt X.
Direktor:Herr A.
Manager:Herr L.
Chef:Herr X
Abteilung A Abschnitt L Abschnitt Y Abschnitt
Direktor:Herr A.
Manager:Herr L.
Chef:Herr Y.
Abteilung A M Abschnitt Z Abschnitt
Direktor:Herr A.
Manager:Herr M.
Chef:Herr Z.
Abteilung B Abschnitt N Abschnitt W Abschnitt
Direktor:Herr B.
Manager:Herr N.
Chef:Herr W.

Ein anderer Weg

für ky in der Konfiguration:
    print(' '.join(ky))
    dc =Name.get_list(ky, True)
    print(f'Direktor: %s'%dc['Direktor'][0])
    print(f'Manager: %s'%dc['Manager'][0])
    print(f'Chef: %s'%dc['Chef'][0])
>>>
Abteilung A, Abschnitt L, Abschnitt X.
Direktor:Herr A.
Manager:Herr L.
Chef:Herr X
Abteilung A Abschnitt L Abschnitt Y Abschnitt
Direktor:Herr A.
Manager:Herr L.
Chef:Herr Y.
Abteilung A M Abschnitt Z Abschnitt
Direktor:Herr A.
Manager:Herr M.
Chef:Herr Z.
Abteilung B Abschnitt N Abschnitt W Abschnitt
Direktor:Herr B.
Manager:Herr N.
Chef:Herr W.

Wie unten gezeigt, ist der in [Name.A Abteilung] definierte Manager auch "Name.A Abteilung.L Abschnitt.X Abschnitt" oder [Name.A Abteilung.L Abschnitt.Y Abschnitt] "Manager =" Herr A "". Ich konnte mich darauf beziehen.

[Name.Teil A] Direktor = "Herr A"

Auf diese Weise können Sie das Attribut aus den Enddaten (Teilnehmer) abrufen, ohne sich Gedanken darüber machen zu müssen, wo das Attribut in der Baumstruktur definiert wurde.

das ist alles

Recommended Posts

Umgang mit spärlichen Attributen in einer Baumstruktur (Python)
Python> Umgang mit 2D-Arrays
Umgang mit Python auf Mac
Umgang mit JSON-Dateien in Python
Python-Fehlerbehandlung
Python-Grundlagen ①
Grundlagen von Python ①
Behandlung von Python-Ausnahmen
Kopie von Python
Python-Zeitzonenbehandlung
Behandlung von Python-Ausnahmen
Einführung von Python
So legen Sie Attribute mit Mock of Python fest
[Python] Kapitel 02-02 Grundlagen von Python-Programmen (Umgang mit Zeichenketten)
[Python] Kapitel 02-06 <Zusatz> Grundlagen von Python-Programmen (Umgang mit numerischen Werten)
[Python] Operation der Aufzählung
Liste der Python-Module
Umgang mit Yaml mit Python
Vereinheitlichung der Python-Umgebung
Kopie der Python-Einstellungen
Umgang mit Json in Python
Grundlagen der Python-Scraping-Grundlagen
[Python] Verhalten von Argmax
Verwendung von Python-Einheimischen ()
der Zen von Python
Installieren von Python 3.3 rc1
Python, über die Ausnahmebehandlung
Pythons Umgang mit Dezimalstellen
# 4 [Python] Grundlagen der Funktionen
Umgang mit Hexadezimal in Python3
Flugzeugskelettanalyse mit Python (4) Umgang mit erzwungener Verschiebung
Grundkenntnisse in Python
Nüchterne Trivia von Python3
Zusammenfassung der Python-Argumente
Grundlagen von Python: Ausgabe
Installation von matplotlib (Python 3.3.2)
Anwendung von Python 3 vars
Verschiedene Verarbeitung von Python
Hinweise zum Umgang mit großen Datenmengen mit Python + Pandas
Vergleich der Datenrahmenbehandlung in Python (Pandas), R, Pig
[Python] Richtige Verwendung der Karte
Behandlung von Python-Ausnahmen (Python-Lernnotiz ⑥)
Umgang mit absoluten Pfaden von os.path.join
Auf dem Weg zum Ruhestand von Python2
Zusammenfassung der Python-Dateivorgänge
Zusammenfassung der Python3-Listenoperationen
Python - Schneller Start der Protokollierung
Empfehlung der binpacking Bibliothek von Python
[Python] Wert des Funktionsobjekts (?)
Umgang mit Zitaten in [bash]
Automatisches Update des Python-Moduls
Python --Überprüfen Sie den Wertetyp
[Python] Der Ursprung des Namens der Python-Funktion
Umgang mit spärlichen Matrizen in Scipy
Statische Analyse von Python-Programmen
Über verschiedene Codierungen von Python 3
Objektäquivalenzbeurteilung in Python
Einführung in Aktivitäten mit Python