我正在开发一个程序,该程序将读取NBA球队名称的.txt文件,并为每个球队提供5位数统计数据。我能够将文件读入带有正确键值对的字典中,但无法弄清楚如何为所有团队中的每个统计信息返回最小值,最大值和平均值的表。我看过网站上的其他问题,但找不到与字典中每个条目具有多个值的键有关的任何内容。这是其中一些条目的字典外观:
{'Golden State Warriors':[113.5, 107.5, 43.5, 0.503, 8.0], 'Houston Rockets':[112.4, 103.9, 43.5, 0.46, 8.5], ... : ...}
我需要创建一个表,以显示所有条目中每个统计信息的最小值,最大值和平均值:
PPG PPAG RPG FG SPG
MIN
MAX
AVG
我可以使用列表形式的统计信息来完成此类工作,但是每当我尝试将列表写入字典时,都会收到TypeError。非常感谢您的建议,我已经坚持了几个小时。
此外,重要说明:我不能使用lambda来完成此任务,我正在为项目进行此工作,我的选项是for循环,while循环以及基本列表函数和字典方法。
答案 0 :(得分:-1)
只要每个团队的所有数据在字典中的顺序都相同,这将很好地满足您的目的。我首先形成一个包含字典值的列表,这些字典值也是列表。然后,您可以将子列表压缩在一起,这具有将列表中所有相同索引分组在一起的便捷功能。现在,我们可以在每个压缩统计信息中调用最大值,最小值和均值了!如果您无法导入“统计”模块,那么列表组合也很容易实现。
from statistics import mean
stats = {'Golden State Warriors':[113.5, 107.5, 43.5, 0.503, 8.0], 'Houston Rockets':[112.4, 103.9, 43.5, 0.46, 8.5]}
values = [*zip(*stats.values())]
for value in values:
print("max: {}\nmin: {}\nmean: {:0.3f} \n".format(max(value), min(value), mean(value)))
编辑:请注意,如果尝试将长度不相同的列表压缩在一起,则会以最短的列表压缩。可以通过使用itertools izip_longest并提供默认值来纠正此问题。
答案 1 :(得分:-1)
以下代码应该计算stas:
from statistics import mean
lists = list(dic.values())
output = {'MIN':[], 'MAX':[], 'AVG':[]}
for i in range(0, len(lists[0])):
output['MIN'].append(min(col[i] for col in lists))
output['MAX'].append(max(col[i] for col in lists))
output['AVG'].append(mean(col[i] for col in lists))
要将结果打印为表格,您可以执行以下操作:
print("\tPPG\tPPAG\tRPG\tFG\tSPG")
for stats in output:
print(stats, end='\t')
for i in range(0, cols):
print(round(output[stats][i], 3), end='\t')
print()
希望有帮助。