Мин. / Макс. Значения в нескольких подсписках в словаре - PullRequest
0 голосов
/ 18 ноября 2018

Я работаю над программой, которая будет считывать в словарь текстовый файл с именами команд NBA со статистикой по пятеркам для каждой команды. Мне удалось прочитать файл в словарь с правильными парами ключ-значение, но я не могу понять, как вернуть таблицу минимальных, максимальных и средних значений для каждой статистики по всем командам. Я смотрел на другие вопросы на сайте, но я не могу найти ничего, касающегося ключа с несколькими значениями для каждой записи в словаре. Вот как выглядит словарь для нескольких записей:

 {'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. Буду очень признателен за предложения, я застрял на этом в течение нескольких часов.

Кроме того, ВАЖНОЕ ПРИМЕЧАНИЕ: я не могу использовать лямбду для этой задачи, я работаю над этим для проекта, и я могу выбрать циклы, циклы, а также базовые функции списка и методы словаря.

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Следующий код должен выполнять вычисления 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()

Надеюсь, это поможет.

0 голосов
/ 18 ноября 2018

Пока все данные для каждой команды в словаре в одном и том же порядке, это будет хорошо работать для вашей цели.Я начал с формирования списка, содержащего значения словаря, которые также являются списками.Затем вы можете сжать подсписки вместе, это имеет удобную функцию группировки всех одинаковых индексов в списках вместе.Теперь мы можем вызывать max, min и mean для каждой статистики zip'd!Если вы не можете импортировать модуль «статистика», список компоновки также будет простым.

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 и указав значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...