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, но я просто не знаю, как это сделать. Пожалуйста помоги.
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)
Вы можете поймать исключение ZeroDivisionError с помощью блока 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')
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.