我有一个具有以下数据格式的文件:
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}
任何帮助将不胜感激
答案 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))