Как изменить данные в словаре?

Решаю одну задачу по словарям.

Напишите программу, которая принимает на стандартный вход список игр футбольных команд с результатом матча и выводит на стандартный вывод сводную таблицу результатов всех матчей.
За победу команде начисляется 3 очка, за поражение — 0, за ничью — 1.
Формат ввода следующий:
В первой строке указано целое число nn — количество завершенных игр.
После этого идет nn строк, в которых записаны результаты игры в следующем формате:
Первая_команда;Забито_первой_командой;Вторая_команда;Забито_второй_командой
Вывод программы необходимо оформить следующим образом:
Команда:Всего_игр Побед Ничьих Поражений Всего_очков
Конкретный пример ввода-вывода приведён ниже.

Входные данные:
3
Спартак;9;Зенит;10
Локомотив;12;Зенит;3
Спартак;8;Локомотив;15

Выходные данные:
Спартак:2 0 0 2 0
Зенит:2 1 0 1 3
Локомотив:2 2 0 0 6

    col = int(input())
    spi = []
    slov = {}

    for i in range(col):
        team = input().split(';')
        team[1], team[3] = int(team[1]), int(team[3])
        spi.append(team)
        a = slov.fromkeys([team[0], team[2]], [0, 0, 0, 0, 0])
        slov.update(a)

    for i in range(len(spi)):
         for j in range(1):
                if spi[i][1] > spi[i][3]:
                    print(spi[i])
                    for key, value in slov.items():
                        if spi[i][0] in key:
                            value[0] = value[0] + 1
                            value[1] = value[1] + 1
                            value[2] = value[2] + 0
                            value[3] = value[3] + 0
                            value[4] = (value[1] * 3) + (value[2] * 1)
    print(slov)

Не понимаю почему программа выдает такие данные:
{'Спартак': [1, 1, 0, 0, 3], 'Зенит': [0, 0, 0, 0, 0], 'Локомотив': [1, 1, 0, 0, 3]}

По моей задумке она должна вывести такие данные в цикле при определённых условиях:
{'Спартак': [0, 0, 0, 0, 0], 'Зенит': [0, 0, 0, 0, 0], 'Локомотив': [1, 1, 0, 0, 3]}

Кто сможет объяснить почему так ведёт себя код?


Ответы (1 шт):

Автор решения: Chernocringing

У вас не были прописаны варианты для ничьи, победы другой команды. Также не учитывались количество игр, если попадало в условие. Изменил код на более менее рабочее:

col = int(input())
spi = []
slov = {}

def newUpdate(oldValue, newValue):
    s = oldValue.copy()
    for i in range(5):
        s[i] += newValue[i]
    return s

for i in range(col):
    team = input().split(';')
    team[1], team[3] = int(team[1]), int(team[3])
    spi.append(team)
    a = slov.fromkeys([team[0], team[2]], [0, 0, 0, 0, 0])
    slov.update(a)

for i in range(len(spi)):
    if spi[i][1] > spi[i][3]:
        tmp = newUpdate(slov[spi[i][0]], [1, 1, 0, 0, 3])
        slov.update({spi[i][0]: tmp})

        tmp = newUpdate(slov[spi[i][2]], [1, 0, 0, 1, 0])
        slov.update({spi[i][2]: tmp})
    elif spi[i][1] == spi[i][3]:
        tmp = newUpdate(slov[spi[i][0]], [1, 0, 1, 0, 1])
        slov.update({spi[i][0]: tmp})

        tmp = newUpdate(slov[spi[i][2]], [1, 0, 1, 0, 1])
        slov.update({spi[i][2]: tmp})
    else:
        tmp = newUpdate(slov[spi[i][2]], [1, 1, 0, 0, 3])
        slov.update({spi[i][2]: tmp})

        tmp = newUpdate(slov[spi[i][0]], [1, 0, 0, 1, 0])
        slov.update({spi[i][0]: tmp})

print(slov)
→ Ссылка