Python 3.x 仅获取python3中的最后一对字典

Python 3.x 仅获取python3中的最后一对字典,python-3.x,dictionary,Python 3.x,Dictionary,我有一个脚本,可以读取和解析一个文件,该文件有如下行,每个字段用“,”分隔: Ezequiel Garay,23230,0,1 我做了一个函数来获得第一个字段,它的最大值是:(第四个字段*第三个字段)/第二个字段 我的代码如下: #!/usr/bin/python3 def maxperf(lj): n = lj[0] if (int(lj[1])) > 0: performance=((int(lj[3]) + 1)*(int(lj[2])))/i

我有一个脚本,可以读取和解析一个文件,该文件有如下行,每个字段用“,”分隔:

Ezequiel Garay,23230,0,1

我做了一个函数来获得第一个字段,它的最大值是:(第四个字段*第三个字段)/第二个字段

我的代码如下:

#!/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()
问题是,我只得到字典的最后一对(我的意思是,好像每一行都覆盖了前一行,而不是附加它),我的代码有什么问题

更新: 我修改了答案:

#!/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

它工作得很好,这是因为您正在打印
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)

我不明白行
name,perf=perf(jugadores)
workh,我看到它得到的是perf函数return@sebelk:它将
perf()
返回的元组解压为两个变量:
name
perf
@sebelk命名不好,真丢脸。将
perf
变量或
perf
函数重命名为其他名称,这样它们的名称就不会冲突。我会更新我的答案。@sebelk:当然,如果你把
par
dictionary传给它,你可以搜索它。但是您需要在这个函数之外有一个持久的字典——您不能每次调用您的函数时都从头开始创建它。