У меня есть скрипт, который читает и проверяет файл, который имеет строки следующим образом, каждое поле отделяется «»:получить только последнюю пару словаря в Python3
Ezequiel Garay,23,230,0,1
Я сделал функцию чтобы получить первое поле, которое имеет максимальное значение, полученное из: (4th_field * 3rd_field)/2nd_field
Мой код выглядит следующим образом:
#!/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()
Проблема в том, что я получаю только последнюю пару словаря (я имею в виду, что каждая строка перезаписывает предыдущую, а не добавляет ее), что случилось с моим кодом?
UPDATE: Я изменил ответы:
#!/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
И это работает отлично
Я не понимаю, как делает строку 'имя, перфорация = Perf (') Игроки Команды работы – sebelk
О, я вижу, что он получает то, что возвращает функция perf – sebelk
@sebelk: он распаковывает кортеж, возвращаемый 'perf()', на две переменные: 'name' и' perf'. –