2014-11-06 57 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)) 

我想从字典中创建一个表。首先,我将元组转换为字典并按键对字典进行排序。接下来,我试图打印出(密钥,密钥数量,平均值)。但是,当我尝试对平均部分进行求和(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) 

您可以通过try和catch块捕获异常ZeroDivisionError;

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')