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传给它,你可以搜索它。但是您需要在这个函数之外有一个持久的字典——您不能每次调用您的函数时都从头开始创建它。