[^ 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).
Définissez et utilisez deux types d'informations: une ** configuration ** arborescente et un attribut (** nom **).
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é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')
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
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