Получить средние из словаря в Python - PullRequest
0 голосов
/ 15 апреля 2020

Получить средние значения из словаря python, например, если у меня есть следующий словарь:

students={'Dan':(5,8,8), 'Tim':(7), 'Richard':(9,9)}

И я хотел бы напечатать словарь в следующей форме:

results={'Dan':(7), 'Tim':(7), 'Richard':(9)}

есть ли какая-нибудь функция, которую я могу использовать? Я новое кодирование в python, поэтому словари меня немного смущают.

Ответы [ 4 ]

1 голос
/ 15 апреля 2020

Если вы хотите, чтобы значения avg были элементом кортежа (я не вижу причин для этого, но, возможно, мне не хватает контекста), попробуйте:

results={k: (sum(v)/len(v),) for k,v in students.items()}
0 голосов
/ 15 апреля 2020

Я бы сделал:

result = {}
for k, v in students.items():
  if type(v) in [float, int]:
    result[k] = v
  else:
    result[k] = sum(v) / len(v)
0 голосов
/ 15 апреля 2020

Я пытался это сделать, но понял, что у нас возникла проблема с суммированием кортежа длины 1. Таким образом, вы можете сделать это следующим образом.

results = {}
for k, v in students.items():
    print(v)
    if (isinstance(v, int)):
        results[k] = v
    else:
        results[k] = sum(v) / len(v)
0 голосов
/ 15 апреля 2020

Решением Pythoni c было бы использование словарного понимания для создания словаря результатов.

def avg(l):
    return sum([l]) / len(l)

results = {key: (avg(val)) for (key, val) in students.items()}

Вам нужно заключить в скобки сумму l, чтобы кортеж считался списком. Далее я бы изменил структуру данных на список вместо кортежа.

...