Je me demande quels sont les avantages/inconvénients des dicts imbriqués par rapport à hacher un tuple en Python?Python - Dict imbriqué, ou hachage d'un tuple?
Le contexte est un petit script pour assigner des «ateliers» aux participants à une conférence.
Chaque atelier a plusieurs attributs (par exemple, semaine, jour, sujet, etc.). Nous utilisons quatre de ces attributs afin d'assigner des ateliers à chaque participant - à savoir chaque délégué aura également une semaine/jour/sujet, etc.
Actuellement, je suis en utilisant un dictionnaire imbriqué pour stocker mes ateliers:
workshops = defaultdict(lambda: defaultdict(lambda:defaultdict(lambda:defaultdict(dict))))
with open(input_filename) as input_file:
workshop_reader = csv.DictReader(input_file, dialect='excel')
for row in workshop_reader:
workshops[row['Week ']][row['Stream']][row['Strand']][row['Day']] = row
return workshops
Je peux ensuite utiliser la structure de données ci-dessus pour attribuer à chaque participant son atelier. Le problème est postérieur, j'ai besoin de parcourir tous les ateliers, et d'assigner un ID (cet ID est stocké dans un système différent), ce qui nécessite de déballer la structure couche par couche. Première question - Y a-t-il une autre façon de créer un index secondaire avec les mêmes valeurs, en utilisant une chaîne (nom de l'atelier) comme clé? C'est à dire. J'aurais toujours les dicts imbriqués à quatre niveaux, mais je pourrais aussi rechercher des entrées individuelles basées sur un simple nom. Deuxièmement, comment puis-je obtenir un effet similaire en utilisant les tuples comme clé? Y at-il des avantages que vous pouvez penser en utilisant cette approche? Serait-il plus propre ou plus facile à utiliser? (Tout ce déballage c'est un peu douloureux, et je ne pense pas que ce soit très accessible).
Ou existe-t-il d'autres structures de données que vous pourriez recommander et qui pourraient être supérieures/plus faciles d'accès/de manipulation?
Merci, Victor
Ne serait-il pas préférable d'utiliser un tuple nommé puisqu'il ne s'agit que de données? –
Hmm, c'est un bon point aeter =). J'aurais dû y penser ... lol. Et je suppose que je peux juste créer un dict des ateliers, pour faciliter la recherche rapide? Cependant, comment puis-je traverser la hiérarchie alors? Par exemple, avant de pouvoir accéder à la première couche pour obtenir tous les ateliers de la semaine 1, déroulez la couche suivante pour obtenir tous les ateliers de la semaine 1, du flux 1, etc. Est-il encore possible de naviguer avec des classes? – victorhooi
Fondamentalement, si je vais en classe, y a-t-il un moyen facile de lister tous les ateliers pour une semaine/un brin/un flux donné - en supposant que Week/Strand/Stream sont des attributs d'instance dans la classe? – victorhooi