使用函数从列表中的文本创建字典

时间:2018-08-13 04:42:23

标签: python list function dictionary text

尝试分析一些编码为文本文件的数据。此文本文件中的每一行都是一大堆结构化的数据,其中包含我需要的一些信息,因此我创建了一个遍历所有行并从中生成字典的函数,以提取所需的数据并为其添加标签。但是我在该函数中创建的字典无法识别,并显示以下错误:

Traceback (most recent call last):
File "TSE.py", line 43, in <module>
print(dic)
NameError: name 'dic' is not defined

我的代码是这样的:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import csv

with open('/path/to/Documents/Eleicoes 2018/Resultados/new2010.txt') as f:
    df1 = [line.rstrip('\n') for line in f]

with open('/path/to/Documents/Eleicoes 2018/Resultados/new2012.txt') as f:
    df2 = [line.rstrip('\n') for line in f]

with open('/path/to/Documents/Eleicoes 2018/Resultados/new2014.txt') as f:
    df3 = [line.rstrip('\n') for line in f]

with open('/path/to/Documents/Eleicoes 2018/Resultados/new2016.txt') as f:
    df4 = [line.rstrip('\n') for line in f]

lista = []

def extr(line):
    dic = {}
    dic['Ano'] = line[2]
    dic['Turno'] = line[3]
    dic['UF'] = line[5]
    dic['UE_City_TSE'] = line[6]
    dic['City_TSE'] = line[7]
    dic['Municipio'] = line[8]
    dic['Zona'] = line[9]
    dic['Cargo_Cod'] = line[10]
    dic['Candidato'] = line[14]
    dic['Cargo_Come'] = line[15]
    dic['COD_Apto'] = line[18]
    dic['Apto'] = line[19]
    dic['Situacao_COD'] = line[20]
    dic['Situacao'] = line[21]
    dic['Partido'] = line[23]
    dic['Quantidade_Votos'] = line[28]
    return dic

for i in range(len(df1)):
    x = df1[i].split(';')
    extr(line=x)
    print(dic)
    lista.insert(i,dic)
    continue

print(lista[:5])

我知道这不是映射此数据的最佳方法,但是我在加载该文件以及使用numpy来构造一个数组时遇到了一些问题。因此,尽管有试探法,有人可以帮助我吗?当我没有定义一个函数,而是仅遍历行选择数据时,我需要所有字典都是相同的,即最后一行或第一行。在追加了在迭代中创建的字典之后,我尝试清理字典,但是当我这样做时,所有字典都是空的。如果您需要更多说明或认为我的启发式完全错误并且应该更改它,欢迎提出建议!谢谢!

2 个答案:

答案 0 :(得分:0)

这是因为字典是在函数内部声明的。因此,它在该范围内是本地的,并且您没有将返回的值存储到变量中。在这里试试

for i in range(len(df1)):
    x = df1[i].split(';')
    dic = extr(line=x)
    print(dic)
    lista.insert(i,dic)
    continue

答案 1 :(得分:0)

请在Python代码中使用缩进。 替换

extr(line=x)

使用

dic = extr(line=x)