Перебирая словари в списке, чтобы найти сумму значений из соответствующих ключей.(Подсчет голосов) - PullRequest
0 голосов
/ 01 мая 2019

У меня проблемы с прилавком к работе.То, что я пытаюсь сделать, это получить подсчет голосов.ключи - имена кандидатов, значения - количество голосов.Соберите эту информацию из пользовательского ввода и распечатайте итоговый подсчет голосов по каждому кандидату.

from collections import Counter

name_vote =[]
count = int(input('How many?'))

while count >=1: 
    a=input('Name')
    b=input('Vote')
    c={ a:b }
    name_vote.append(c)
    count = count - 1

print(name_vote)

c = Counter()
for d in name_vote:
    c.update(d)

print(c)

пользователь сначала сообщает, сколько голосов набрано (это количество)

Таким образом, вход выглядит какэто: сколько?= 6

Джон 2

Билл 5

Джон 4

Скотт 11

Джон 3

Скотт 1

Результат: (Распечатка)

Джон 9

Билл 5

Скотт 12

Совсем новыйна это и очень ценю помощь.Пробовал искать решение в других постах, вот где я нашел счетчик.Но не работает в моем коде.Выдает ошибку:

Traceback (most recent call last):
  File "c:/Users/Rghol5212/hello/Dico.py", line 30, in <module>
    c.update(d)
  File "C:\Users\Rghol5212\AppData\Local\Programs\Python\Python37- 
 32\lib\collections\__init__.py", line 649, in update
    self[elem] = count + self_get(elem, 0)
TypeError: can only concatenate str (not "int") to str

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 01 мая 2019

Использование Счетчик

from collections import Counter

name_vote = Counter()

count = int(input('How many? '))

while count >= 1:
    name = input('Name ')
    vote = int(input('Vote '))
    name_vote += {name: vote}
    count -= 1

for name, cnt in name_vote.items():
    print("Name: {}, Vote: {}".format(name, cnt))
0 голосов
/ 03 мая 2019

Я полагаю, что проблема в линии b=input('Vote').Когда вы получаете b от входа, его тип равен string, вам нужно изменить его на int, чтобы можно было добавлять числа.Попробуйте, добавив одну строку кода b=int(b).

0 голосов
/ 01 мая 2019

Попробуйте вместо этого использовать defaultdict . Если имя не существует в словаре, будет использоваться значение по умолчанию, равное нулю. Если имя существует, голоса просто увеличат счет.

from collections import defaultdict

name_vote = defaultdict(int)

count = int(input('How many?'))

while count >=1: 
    a=input('Name')
    b=input('Vote')
    name_vote[a] = name_vote[a] + int(b)
    count = count - 1

for k,v in name_vote.items():
    print("{} {}".format(k,v))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...