我的代码从用户那里获取字典并获取字典中值的平均值,它必须返回列表中具有最高平均值的键。但我想把它变成一个循环。我在底部写了一个代码,但它不起作用。我的
def average(idx):
return sum(idx) / len(idx)
def mylist(thekey):
try:
return max(thekey, key=lambda k: average(thekey[k]))
except TypeError:
return -1
thekey = {
"list_1": [0, 6, 50000, 250],
"list_2": [772277, 880008, 33300, 1000],
"list_3": [100000000, 2555555, 2000, 2000]
}
print(mylist(thekey))
这是我使用 for 循环的代码:
def average(idx):
return sum(idx) / len(idx)
def mylist(thekey):
for key, value in thekey.items():
if all(isinstance(value, int) for value in thekey.items()) == False:
return -1
else:
list = key
idx = value
list_avg = {}
x = average(idx)
list_avg.update({list: x})
for maximum in list_avg:
return max(list_avg[maximum])
thekey = {
"list_1": [0, 6, 50000, 250],
"list_2": [772277, 880008, 33300, 1000],
"list_3": [100000000, 2555555, 2000, 2000]
}
print(mylist(thekey))
在更新代码的第一个版本时,您可以编写自己的循环来做的唯一有用的事情是重做max
已经完成的事情。这让您在max
代码的第二个版本中调用自己变得更加奇怪。如果您只想使用max
,则不需要自己的循环!
尝试:
def mylist(thekey):
max_key = None
max_avg = float('-inf') # negative infinity
for key, value in thekey.items(): # only one loop needed for this
try:
avg = average(value) # try to get an average
except TypeError:
return -1 # if we can't, give up and bail out early
if avg > max_avg: # otherwise, compare with max so far
max_key = key
max_avg = avg
return max_key # return only after the loop ends
请注意,您通常不希望return
从循环内部进行,除非您遇到需要您退出并放弃循环其余部分的条件。您只想在遇到异常时在此程序中执行此操作(返回-1
而不处理其余输入)。否则,您需要等到循环结束才能返回。
我没有在循环体中复制您对所有变量的重命名,因为这既不必要又非常令人困惑。您的list
变量不包含列表(它是一个字符串),也不idx
包含索引(它是一个列表)。如果您想通过迭代.items()
字典为键和值提供有意义的名称,只需在循环中直接使用这些名称for
(但如果没有更好的名称也可以)key
。value
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句