I have a script that read and parse a file that has lines as follows, every field is separated by ",":
Ezequiel Garay,23,230,0,1
I made a function to obtain the first field that has the maximum value resulting of: (4th_field * 3rd_field ) / 2nd_field
My code is as follows:
#!/usr/bin/python3
def maxperf(lj):
n = lj[0]
if (int(lj[1])) > 0:
performance=((int(lj[3]) + 1)*(int(lj[2])))/int(lj[1])
else: performance=0
par = dict([(n,performance)])
return max(par, key = par.get)
archivojugs = open("datos_ej1.txt")
jugadores = []
for jugador in archivojugs:
jugadores = jugador.split(",")
mp=maxperf(jugadores)
print(mp)
archivojugs.close()
The problem is that I get only the last pair of the dictionary (I mean, it's as if each line overwrite the earlier one instead of append it), what's wrong with my code?
UPDATE: I've modified the answers:
#!/usr/bin/python3
def calcperf(n,pj,d,gg):
'''Calculo performance'''
if int(pj) > 0:
p = ((int(gg) + 1 ) * int(d)) / int(pj)
else: p = 0
return p
def maxperf(lp):
'''Saco el jugador con mejor rendimiento'''
mp = max(lp, key=lp.get)
return mp
archivojugs = open("datos_ej1.txt")
listperfs = {}
for jugador in archivojugs.readlines():
NOMBRE, PJ, DISTANCIA, GOLES, CONTROL = jugador.split(',')
rendimiento = calcperf(NOMBRE,PJ,DISTANCIA,GOLES)
listperfs[NOMBRE] = rendimiento
mejorperf = maxperf(listperfs)
print(mejorperf)
archivojugs.close
And it works fine
答案 0 :(得分:2)
那是因为你正在打印mp
,它在for循环的每次迭代中都会发生变化,而你只能从最后一次迭代中获得它的状态。此外,您的par
字典是maxperf
函数的本地字典,每次调用该函数时只包含一个条目。
您需要一个非本地字典来存储maxperf
函数的结果。让我们创建一个根本不存储计算性能的函数,只返回它:
def perf(lj):
n = lj[0]
if (int(lj[1])) > 0:
performance=((int(lj[3]) + 1)*(int(lj[2])))/int(lj[1])
else:
performance=0
return n, performance
现在,回到我们的循环:
par = {}
for jugador in archivojugs:
jugadores = jugador.split(",")
name, p = perf(jugadores)
par[name] = p
maxperf = max(par, key=par.get)
print(maxperf)
另外,请记住,将表演存储在字典中,只是为了 找到最大值,是不必要的,你会用这样的东西做得更好:
import operator
mp = max(perf(jugador.split(',')) for jugador in archivojugs,
key=operator.itemgetter(1))
print(mp)