Python Добавление +1 к элементу списка, находящемуся в ведении - PullRequest
0 голосов
/ 30 апреля 2020

Во-первых, у меня есть список диктов с информацией о некоторых спортсменах, который выглядит следующим образом:

athletes = [{"name":"Robert", "country":"england", "event": "athletics men's 50000 metres", "medal":"gold"}, 
{"name":"Jan", "country":"england", "event": "athletics men's 50000 metres", "medal":"silver"}....]

Мне нужно создать дикт, основанный на названии страны Роберта и количестве медалей, которые они (страна в конкретном c событии), должна выглядеть так:

{'canada': [0, 0, 1], 'china': [1, 0, 0]...}

Первая позиция представляет золотые медали, вторую, серебряную и третью бронзовую.

{"medal":} может иметь "gold", "silver", "bronze" или "na" (не применимо)

Я пытался сделать это:

def funct(athletes:list, event:str):
    import copy
    list1 = [0, 0, 0]
    dicc = {}
    for i in athletes:
        if i["event"] == event and i["medal"] != 'na':
            dicc[i["country"]] = copy.deepcopy(list1)
        for country in dicc.keys():
            if country == i["country"] and i["medal"] == "gold":
                dicc[country][0] +=1
            elif country == i["country"] and i["medal"] == "silver":
                dicc[country][1] +=1
            elif country == i["country"] and i["medal"] == "bronze":
                dicc[country][2] +=1
return dicc

print(funct(athletes, "athletics men's 50000 metres"))

Это работает, но я просто получаю информацию о последнем спортсмене этой страны (используя список сверху):

{'england': [0, 1, 0]

Когда я должен получить (ожидаемый результат):

{'england': [1, 1, 0]

что мне сделать, чтобы это исправить?

1 Ответ

0 голосов
/ 30 апреля 2020

вы можете попробовать следующее:

не сбрасывать счетчики страны после каждой итерации:

def funct(athletes:list, event:str):
    import copy
    list1 = [0, 0, 0]
    dicc = {}
    for i in athletes:
        if i["event"] == event and i["medal"] != 'na':
            if i["country"] not in dicc: # only initialize if not existing
                dicc[i["country"]] = copy.deepcopy(list1)
        for country in dicc.keys():
            if country == i["country"] and i["medal"] == "gold":
                dicc[country][0] +=1
            elif country == i["country"] and i["medal"] == "silver":
                dicc[country][1] +=1
            elif country == i["country"] and i["medal"] == "bronze":
                dicc[country][2] +=1
return dicc

print(funct(athletes, "athletics men's 50000 metres"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...