Tengo un siguiente formato de archivo de texto

Id,    person, age,  city
ef12,  james,  23,   berlin  
yt34,  mary,   45,   pisa  
rt23,  john,   56,   barcelona

Quiero generar un diccionario de los siguientes tipos. Por favor, ayúdame .

{ef12: {person:'james', age:'23',city:'berlin'},   
yt34: {person:'mary', age:'45',city:'pisa'},    
rt23: {person:'john', age:'23',city:'barcelona'},  

}

Estoy atascada en abajo

`import time
import sys

def getData():
    file = open('traffic.txt', 'r')
    data = file.readlines()
    myDic = {}
    #for line in data.split('\n'):
    for line in data:
        tmp = line.strip().split()
        #myDic[tmp[0]]= list(tmp[1])
        #print(tmp[2])
        myDic[tmp[0]] = {tmp[1],tmp[2],tmp[3],tmp[4],tmp[5]}
    file.close()
    return myDic
theNewDictionary = getData()
print(theNewDictionary)
`
0
codegeeka 28 oct. 2017 a las 05:04

3 respuestas

La mejor respuesta

Otra forma es leer las filas del csv y actualizar el diccionario con cada fila:

dicty = {}

for row in csv.DictReader(open('a.csv')):
    dicty.update({
        row['Id']: {
            'person': row['person'],
            'age'   : row['age'],
            'city'  : row['city']
        }
    })

print(dicty)
# {'ef12': {'person': 'james', 'age': '23', 'city': 'berlin'},
#  'yt34': {'person': 'mary',  'age': '45', 'city': 'pisa'},
#  'rt23': {'person': 'john',  'age': '56', 'city': 'barcelona'}}

dicty.get('ef12')
# {'age': '23', 'city': 'berlin', 'person': 'james'}
0
aaron 30 oct. 2017 a las 17:30

Solo tienes que agregar las llaves

def getData():
    file = open('traffic.txt', 'r')
    data = file.readlines()
    myDic = {}
    for line in data:
        tmp = [s.replace(' ', '') for s in line.strip().split(',')]
        myDic[tmp[0]] = {'person': tmp[1], 'age': tmp[2], 'city': tmp[3]}
    file.close()
    return myDic
1
SP SP 28 oct. 2017 a las 02:29
  1. split por coma: split(',')
  2. strip después de split para eliminar espacios: [word.strip() for word in line.split(',')]
  3. Solo tiene 4 columnas, así que no llame a tmp[4] y tmp[5]; si lo hace, es IndexError.
  4. Nombre sus claves en el diccionario: {'person': tmp[1], 'age': tmp[2], 'city': tmp[3]}

Esto significa:

def getData():
    file = open('traffic.txt', 'r')
    data = file.readlines()
    myDic = {}
    for line in data:
        tmp = [word.strip() for word in line.split(',')]
        myDic[tmp[0]] = {'person': tmp[1], 'age': tmp[2], 'city': tmp[3]}
    file.close()
    return myDic
0
aaron 28 oct. 2017 a las 02:21