J'ai un fichier Excel CSV avec les dossiers des employés en eux. Quelque chose comme ceci:Excel CSV dans le dictionnaire imbriqué; Liste compréhensions
mail,first_name,surname,employee_id,manager_id,telephone_number
[email protected],john,smith,503422,503423,+65(2)3423-2433
[email protected],george,brown,503097,503098,+65(2)3423-9782
....
J'utilise DictReader de mettre cela dans un dictionnaire imbriqué:
import csv
gd_extract = csv.DictReader(open('filename 20100331 original.csv'), dialect='excel')
employees = dict([(row['employee_id'], row) for row in gp_extract])
est-ce qui précède la bonne façon de le faire - il ne fonctionne pas, mais est-ce le droit Façon? Quelque chose de plus efficace? En outre, la chose amusante est, dans IDLE, si j'essaie d'imprimer des «employés» à l'interpréteur de commande, il semble provoquer le blocage de IDLE (il y a environ 1051 lignes).
2. Retirez employee_id de dict intérieur
La deuxième question d'émission, je mets dans un dictionnaire indexé par employee_id, avec la valeur comme un dictionnaire imbriqué de toutes les valeurs - cependant, employee_id est aussi une clé: valeur dans le dictionnaire imbriqué, qui est un peu redondant? Est-il possible de l'exclure du dictionnaire interne?
3. Manipuler les données dans la compréhension
Troisièmement, nous devons faire quelques manipulations pour les données importées - par exemple, tous les numéros de téléphone sont dans le mauvais format, nous devons donc faire un peu regex là. En outre, nous devons convertir manager_id en un nom de gestionnaire réel, et leur adresse e-mail. La plupart des gestionnaires sont dans le même fichier, tandis que d'autres sont dans un CSV external_contractors, qui est similaire mais pas tout à fait le même format - je peux importer cela dans une dict séparée.
-ce que ces deux objets des choses qui peuvent être fait dans la compréhension de la liste unique, ou devrais-je utiliser une boucle? Ou est-ce que plusieurs compréhensions fonctionnent? (code exemple serait vraiment génial ici). Ou y a-t-il une façon plus intelligente de le faire en Python?
Cheers, Victor
heya, @xyld: Merci pour la réponse détaillée =). 1. L'employee_id est garanti d'être unique, d'après ce qu'on m'a dit. Cependant, juste pour référence, quelle est la façon recommandée de gérer cela? Des exceptions? (N'importe quel code d'exemple ici serait génial). 2. Bien, si c'est juste un peu de mémoire supplémentaire, alors je suppose que ce n'est pas un gros problème. Je pensais juste qu'il pourrait y avoir une manière intelligente en Python de l'exclure du dict interne. – victorhooi
3. Hmm, oui, vous avez raison, l'optimisation prématurée est la racine de tous les maux, et tout cela * sourit *. Et oui, c'est juste linéaire, donc je suis sûr que ça ira. Je suis toujours en train d'essayer de comprendre les choses, est-il possible d'en utiliser un pour faire un regex remplacer sur telephone_number, et les recherches pour le manager? – victorhooi
@victorhooi vous êtes trop accroché sur la compréhension de la liste, je pense. Utilisez simplement une boucle for. La compréhension de la liste devrait naturellement figurer dans le code pour le rendre plus propre, et pas seulement pour le ** plaisir **. IMO – dlamotte