输入文件采用以下格式:
Britany 6.06 5.31 4.34 8.60 4.14 3.12 3.53 5.16
Eula 6.46 9.84 7.17 4.89 6.24 8.82 4.31 9.08
Georgianna 0.52 6.95 6.67 5.54 8.27 0.57 8.42 2.76
Serina 3.07 9.22 3.59 0.89 3.91 9.79 6.48 7.81
到目前为止,这是我的代码:
empty={}
floatList=[]
infile= open(userOutputFile,'r',encoding='UTF8')
for line2 in infile:
tempList2= line2.split()[1:]
tempList2.remove(max(tempList2))
tempList2.remove(min(tempList2))
for i in tempList2:
tempList2 = float(i)
floatList.append(tempList2)
我尝试做的是将文件行拆分为字符串列表,然后删除最大值和最小值。这似乎是有效的,但是,当我尝试计算每一行的总和,然后将该总数分配给一个字典,其中相应的名称作为键,值作为总计时,我遇到了问题。基本上字典会读取像Britany(原始文件中的键)之类的东西:43.01(计算总数)。
答案 0 :(得分:1)
Pandas对此有好处:
In [23]: import pandas as pd
In [24]: df = pd.read_table('t.txt', header=None, delimiter=' \w')
In [25]: df.sum(axis=1)
Out[25]:
0 2.26
1 3.81
2 4.70
3 4.76
dtype: float64
In [28]: dict(zip(df[0], df.sum(axis=1)))
Out[28]:
{'Britany ': 2.2600000000000007,
'Eula ': 3.8099999999999996,
'Georgianna ': 4.7000000000000002,
'Serina ': 4.7599999999999998}
In [29]: df.min(axis=1)
Out[29]:
0 0.06
1 0.08
2 0.27
3 0.07
dtype: float64
答案 1 :(得分:0)
立即引起注意的一点是,您将实际迭代中的值与总和相加,并每次重新定义列表。
例如:
empty={}
floatList=[]
infile= open(userOutputFile,'r',encoding='UTF8')
for line2 in infile:
tempList2= line2.split()[1:]
tempList2.remove(max(tempList2))
tempList2.remove(min(tempList2))
print tempList2
我得到['3.07','9.22','3.59','3.91','6.48','7.81'],它们只是最后一行的中间值。
所以你应该做类似以下的事情:
empty={}
infile= open(userOutputFile,'r').readlines()
for line2 in infile:
name = line2.split()[0] #Sets the name to be the initial value
tempList2= line2.split()[1:]
tempList2.remove(max(tempList2))
tempList2.remove(min(tempList2))
sum = 0
for i in tempList2:
i_val = float(i)
sum += i_val #Sums iteratively over each value in tempList2
empty[name] = sum
现在做:
空 {'Georgianna':30.759999999999998,'Serina':34.08,'Eula':42.66,'Britany':28.54}
相同的迭代对值进行求和,并将它们附加到名称下的字典中。
答案 2 :(得分:0)
一些注意事项:
"10.0" < "2.00"
为True
。sum
函数,可以为您汇总列表中的所有数字。这就是我提出的:
infile = open(userOutputFile,'r',encoding='UTF8')
lines = ( line.split() for line in infile )
result = { xs[0]: sum(sorted(map(float, xs[1:]))[1:-1]) for xs in lines }
sum(sorted(map(float, xs[1:]))[1:-1])
部分可能有点难以包围。从内到外,这就是它的作用:
答案 3 :(得分:0)
f = open('input.txt', 'r')
d = f.read()
answers={}
for line in d.split("\n"):
if len(line) > 0:
line = line.split()
#print(line)
floats = [float(x) for x in line[1:]]
floats.remove(max(floats))
floats.remove(min(floats))
name = line[0]
x = sum(floats)
#print(x)
answers[name] = x
print(answers)
提供以下输出:
{'Eula': 42.66, 'Georgianna': 30.759999999999998, 'Britany': 28.54, 'Serina': 34.08}