2014-11-06 2 views
0
def getSortedKeyList(dl): 
    kl = list(dl.items()) 
    kl.sort() 
    return kl 

def tupleListToDict(a): 
    b = {} 
    for k, v in a: 
     b[k] = b.get(k, [])+v 
    return b 

def main(): 
    gradeList = [('Zaphod', [33, 20]), ('Zaphod', [75, 48]), \ 
       ('Slartibartfast', []), ('Trillian', [98, 88]), \ 
       ('Trillian', [97, 77]), ('Slartibartfast', []), \ 
       ('Marvin', [2000, 500]), ('Authur', [42, 20]), \ 
       ('Authur', [64]), ('Trillian', [99]), \ 
       ('Marvin', [450]), ('Marvin', [550]), \ 
       ('Agrajag', []), ('Agrajag', []), ('Agrajag', [0]), \ 
       ('Ford', [50]), ('Ford', [50]), ('Ford', [50])] 

    print('\t', '\t', "Grade", '\t') 
    print('\t', "Name", '\t', "Count", '\t', "Average") 
    print("-----------------------------------------") 

    dicList = tupleListToDict(gradeList)    
    dicList = getSortedKeyList(dicList) 

    for k, v in dicList: 
     print(k, len(v), '\t', sum(v)/len(v)) 

Я пытаюсь сделать таблицу из словаря. Прежде всего, я преобразовал кортеж в словарь и отсортировал словарь по клавишам. Затем я пытаюсь распечатать (ключи, количество ключей, среднее). Однако, когда я пытаюсь сделать sum (v)/len (v) для средней части, я получаю деление на нулевую ошибку. Чтобы избежать ошибки, я попытался вернуть пустое значение из словаря в 0, но я просто не знаю, как это сделать. Пожалуйста помоги.деление на ноль ошибка на словаре python

ответ

0
def getSortedKeyList(dl): 
    kl = list(dl.items()) 
    kl.sort() 
    return kl 

def tupleListToDict(a): 
    b = {} 
    for k, v in a: 
     b[k] = b.get(k, [])+v 
    return b 

def main(): 
    gradeList = [('Zaphod', [33, 20]), ('Zaphod', [75, 48]), \ 
       ('Slartibartfast', []), ('Trillian', [98, 88]), \ 
       ('Trillian', [97, 77]), ('Slartibartfast', []), \ 
       ('Marvin', [2000, 500]), ('Authur', [42, 20]), \ 
       ('Authur', [64]), ('Trillian', [99]), \ 
       ('Marvin', [450]), ('Marvin', [550]), \ 
       ('Agrajag', []), ('Agrajag', []), ('Agrajag', [0]), \ 
       ('Ford', [50]), ('Ford', [50]), ('Ford', [50])] 

    print('\t', '\t', "Grade", '\t') 
    print('\t', "Name", '\t', "Count", '\t', "Average") 
    print("-----------------------------------------") 

    dicList = tupleListToDict(gradeList)    
    dicList = getSortedKeyList(dicList) 

    for k, v in dicList: 
     try: 
      print(k, len(v), '\t', sum(v)/len(v)) 
    except ZeroDivisionError as detail: 
      print('Handling run-time error:', detail) 

Вы можете поймать исключение ZeroDivisionError с помощью try and catch block;

0

Slartibartfast не имеет оценок, и таким образом len(v) равно 0, когда вы попадаете на его запись.

В зависимости от того, что его «средний» должен быть, вы могли бы изменить последнюю петлю на что-то вроде:

for k, v in dicList: 
    print(k, len(v), '\t', sum(v)/len(v) if len(v)>0 else 'N/A') 
Смежные вопросы