2016-04-18 5 views
-1

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

Jhon: 3, 4, 5 
Mark: 5, 5, 5 
Matthew: 7, 8 , 9 

Это мой код:

from statistics import mean 
class1 = {} 
for line in f: 
      columns = line.split(":") 
      if len(columns) == 2: 
       names = columns[0] 
       scores = columns[1].strip() 
      else: 
       pass 
      if class1.get(names): 
       class1[names].append(scores) 
      else: 
       class1[names] = list(scores) 

Я уже пробовал:

for k, v in class1.items() 
    print("{} : {scores}".format(names , mean(scores) 

Я получаю ошибка:

TypeError: unsupported operand type(s) for +: 'int' and 'str' 

И я также пытался:

for k, v in class1.items(): 
    average = float(sum(v))/len(v) 
for k, v in class1.items(): 
    print("{} : {}".format(names=k, average=v) 

Ошибка:

Traceback (most recent call last): 
    File "C:/Users/Onyeka/PycharmProjects/untitled/task3.py", line 59, in <module> 
    print("{} : {scores}".format(names , mean(scores))) 
    File "C:\Python34\lib\statistics.py", line 331, in mean 
    T, total, count = _sum(data) 
    File "C:\Python34\lib\statistics.py", line 161, in _sum 
    for n,d in map(_exact_ratio, values): 
    File "C:\Python34\lib\statistics.py", line 247, in _exact_ratio 
    raise TypeError(msg.format(type(x).__name__)) 
TypeError: can't convert type 'str' to numerator/denominator 

Я хочу выход быть как этот

Jhon: 4 
    Mark: 3 
    Matthew: 8 

бы также можно напечатать эти средние значения от наивысшего до самого низкого?

+0

'средние (баллы)' 'должно быть среднее (v)', и вы пропустили некоторые скобки. И '.format (names = k, average = v)' должен jusst быть '.format (v, average)'. – Barmar

ответ

0

Я немного смущен некоторыми из того, что вы опубликовали, включая странное форматирование для вашего словаря, но я думаю, что понимаю, что вы хотите. Это, как я ее решил:

from statistics import mean 

f = {'Jhon': [3, 4, 5], 'Mark': [5, 5, 5], 'Matthew': [7, 8 , 9]} 
averages = {} 
for key in f: 
    averages[key] = int(mean(f[key])) 

print(averages) 

Выход:

{'Matthew': 8, 'Mark': 5, 'Jhon': 4} 
+0

Получаю: TypeError: unhashable type: 'list'. Ты знаешь что это значит? – BLaBla

+0

Похоже, что где-то в коде вы пытаетесь использовать список в качестве ключа для словаря, который Python не разрешает (потому что словарные ключи должны быть неизменными). Бит кода, который я цитировал, запускался без ошибок в моей системе, но может быть возможно, что изменение к нему или какая-то другая часть вашего кода может вызвать TypeError. – coralvanda

Смежные вопросы