字典中多个子列表的最小值/最大值

时间:2018-11-18 00:04:07

标签: python-3.x dictionary

我正在开发一个程序,该程序将读取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循环以及基本列表函数和字典方法。

2 个答案:

答案 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()

希望有帮助。