如何将我的数据从文件输入到字典中?

时间:2021-02-21 02:59:21

标签: python python-3.x dictionary

我有一个具有以下数据格式的文件:

0
65
88
11
0
11
11

我尝试编写以下代码以创建一个字典,其中键是从 1 到 EOF 的序列,值是文件中的数据: 到目前为止我写的代码是:

hash_1 ={}
#print(hash_1)
file = open('t30.dat','r')
while True:
    data =file.readline()
    if not data:
        break
    print(int(data.strip()))
    #hash_1[int(data.strip())] += 1

问题是我无法弄清楚如何做到这一点的最后一行

<块引用>

hash_1[int(data.strip())] += 1

我想要的输出应该是:

hash_1= {1:0,2:65,3:88,4:11,5:0,6:11,7:11}

任何帮助将不胜感激

4 个答案:

答案 0 :(得分:0)

函数式方法:

with open('t30.dat') as f:
    hash_1 = dict(enumerate(map(int, f), start=1))

答案 1 :(得分:0)

您当前代码的问题在于您试图将 1 添加到不存在的字典值。 hash_1 被定义为一个空字典,您的代码实际上从未向其中添加项目,它只是尝试增加不存在的项目的值。例如,在循环的第一次迭代中,int(data.strip()) 的计算结果为 0,这意味着它正在尝试执行:

hash_1[0] += 1

hash_1 没有分配给 0 的值,因此导致异常。

一种解决方案是使用从 1 开始并增加迭代的计数器变量,并在每次迭代时将 hash_1[<counter>] 分配给数据行,如下所示:

hash_1 ={}
#print(hash_1)
file = open('t30.dat','r')
i = 1
while True:
    data =file.readline()
    if not data:
        break
    print(int(data.strip()))
    hash_1[i] = int(data.strip())
    i += 1
print(hash_1)

i 最初设置为 1,并在循环的每次迭代结束时增加,因此第一次迭代会将键 1 分配给第一行数据,第二次将将 2 分配给下一行数据等

答案 2 :(得分:0)

file = open('t30.dat','r')
lines = file.readlines()
count = 0 #programmers start the count at 0
for line in lines:
    hash_1[count]=int(line)
    count+=1

我不知道你为什么不使用数组而是使用任何东西

答案 3 :(得分:0)

你可以在字典理解中做到:

with open('t30.dat','r') as f:
    hash_1 = dict(enumerate(int(s.strip()) for s in f.read().split("\n"),1))