Tengo un archivo que consta de dos columnas, es decir,
1 a
2 b
3 c
Deseo leer este archivo en un diccionario de modo que la columna 1 sea la clave y la columna 2 sea el valor, es decir,
d = {1:'a', 2:'b', 3:'c'}
El archivo es pequeño, por lo que la eficiencia no es un problema.
python
file
dictionary
Darren J. Fitzpatrick
fuente
fuente
with
se usa aquí para manejar la limpieza del archivo. Cuando abandone el bloque (ya sea por el flujo de ejecución normal o por una excepción), el archivo se cerrará automáticamente. Puede leer más sobre los administradores de contexto en Python aquí: effbot.org/zone/python-with-statement.htmfor line in open("file.txt"):
haga la limpieza de la misma manera. Y si f es un valor local,f
se libera cuando se pierde el alcance. El único caso en el que esta declaración es útil es para una función larga (no es buena para la calidad) o si usa una variable global.for line in open('file.txt')
no no hacer la limpieza de la misma manera. No todas las implementaciones de Python son iguales.with
garantiza que el archivo se cerrará cuando se salga del bloque. Cuando lafor
línea esté completa,close
se puede llamar.CPython
lo hará, pero versiones comoIronPython
tienen recolectores de basura perezosos.Esto dejará la clave como una cadena:
fuente
dict([line.split() for line in f])
es suficiente, en mi opinión.dict([x.rstrip().split(None, 1) for x in f])
lugar dedict(x.rstrip().split(None, 1) for x in f)
. Para aquellos que piensan lo mismo, la primera es una expresión generadora en lugar de una lista de comprensión como se explica aquí: python.org/dev/peps/pep-0289(PEP-289) . ¡Aprendí algo nuevo!Si su versión de Python es 2.7+, también puede usar una comprensión de dictado como:
fuente
fuente
partition
? ywith
declaración?partition
es más rápido y está creado exactamente para este propósito.with
es una forma sencilla de asegurarse de que lo sea.strip
, diría yo.Por comprensión de diccionario
O por pandas
fuente
En mi humilde opinión, un poco más pitónico para usar generadores (probablemente necesite 2.7+ para esto):
Esto también filtrará las líneas que no comiencen con un número entero o que no contengan exactamente dos elementos
fuente
fuente
re
? ¿seriamente?split()
no funciona casi en silencio si el formato de archivo no es sensato.Si te encantan los one liners, prueba:
Archivo de entrada = ruta al archivo, SEP = carácter separador de valor-clave
No es la forma más elegante o eficiente de hacerlo, pero no obstante es bastante interesante :)
fuente
Aquí hay otra opción ...
fuente
Opción simple
La mayoría de los métodos para almacenar un diccionario utilizan JSON, Pickle o lectura de líneas. Siempre que no esté editando el diccionario fuera de Python, este método simple debería ser suficiente incluso para diccionarios complejos. Aunque Pickle será mejor para diccionarios más grandes.
fuente