字典python上的零除错误

2024-06-17 15:56:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我正试着用字典做一张桌子。首先,我将元组转换为dictionary,并按键对dictionary进行排序。接下来,我将尝试打印出(keys,num of keys,average)。然而,当我尝试对平均部分做sum(v)/len(v)时,我得到的除法是零误差。为了避免这个错误,我尝试将字典中的空值返回到0,但是我不知道怎么做。请帮忙。你知道吗


Tags: inforlenreturndefdlprintmarvin
2条回答
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-and-catch块可以捕获异常错误

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

相关问题 更多 >