J'ai un fichier comprenant deux colonnes, c'est à dire,
1 a
2 b
3 c
Je souhaite lire ce fichier dans un dictionnaire tel que la colonne 1 est la clé et la colonne 2 la valeur, c'est-à-dire,
d = {1:'a', 2:'b', 3:'c'}
Le fichier est petit, donc l'efficacité n'est pas un problème.
python
file
dictionary
Darren J. Fitzpatrick
la source
la source
with
est utilisé ici pour gérer le nettoyage des fichiers. Lorsque vous quittez le bloc (soit simplement par le flux d'exécution normal, soit par une exception), le fichier sera automatiquement fermé. Vous pouvez en savoir plus sur les gestionnaires de contexte en Python ici: effbot.org/zone/python-with-statement.htmfor line in open("file.txt"):
faites le nettoyage de la même manière. Et si f est une valeur locale, lef
est libéré lorsque la portée est perdue. Le seul cas où cette instruction est utile est pour une fonction longue (pas bon pour la qualité), ou si vous utilisez une variable globale.for line in open('file.txt')
ne fait pas le nettoyage de la même manière. Toutes les implémentations Python ne sont pas identiques.with
garantit que le fichier sera fermé à la sortie du bloc. Lorsque lafor
ligne est complète,close
peut être appelée.CPython
ce sera le cas, mais les versions commeIronPython
ont des garbage collector paresseux.Cela laissera la clé sous forme de chaîne:
la source
dict([line.split() for line in f])
suffit, imo.dict([x.rstrip().split(None, 1) for x in f])
au lieu dedict(x.rstrip().split(None, 1) for x in f)
. Pour ceux qui pensent la même chose, la première est une expression de générateur au lieu de la compréhension de liste comme expliqué ici: python.org/dev/peps/pep-0289(PEP-289) . J'ai appris quelque chose de nouveau!Si votre version python est 2.7+, vous pouvez également utiliser une compréhension de dict comme:
la source
la source
partition
? etwith
déclaration?partition
est plus rapide et est créé exactement dans ce but.with
est un moyen simple de s'assurer que c'est le cas.strip
, je dirais.Par la compréhension du dictionnaire
Ou par des pandas
la source
IMHO un peu plus pythonique pour utiliser des générateurs (vous avez probablement besoin de 2.7+ pour cela):
Cela filtrera également les lignes ne commençant pas par un entier ou ne contenant pas exactement deux éléments
la source
la source
re
? sérieusement?split()
ne fonctionne pas presque silencieusement si le format de fichier n'est pas sain.Si vous aimez une doublure, essayez:
Input FILE = Chemin d'accès au fichier, SEP = Caractère séparateur clé-valeur
Ce n'est pas la manière la plus élégante ou la plus efficace de le faire, mais tout de même assez intéressante :)
la source
Voici une autre option ...
la source
Option simple
La plupart des méthodes de stockage d'un dictionnaire utilisent JSON, Pickle ou la lecture de lignes. À condition que vous n'éditez pas le dictionnaire en dehors de Python, cette méthode simple devrait suffire même pour les dictionnaires complexes. Bien que Pickle soit meilleur pour les grands dictionnaires.
la source