迭代时将键添加到 int 的 defaultdict

该脚本需要从 text/csv 文件读取输入,但是一旦我尝试实现该功能,一切都会中断。


这是我的代码:


from collections import defaultdict

#from csv import reader


data = """Lions 3, Snakes 3

Tarantulas 1, FC Awesome 0

Lions 1, FC Awesome 1

Tarantulas 3, Snakes 1

Lions 4, Grouches 0"""


# with open('sample_input.csv') as data:

#     csv = reader(data)

#     list_csv = [line.rstrip('\n') for line in data]


data_list = data.splitlines()



def splitter(row):

    left_team, right_team = row.split(',')

    return {

        'left': left_team[:-2].strip(),

        'left_score': int(left_team[-2:].strip()),

        'right': right_team[:-2].strip(),

        'right_score': int(right_team[-2:].strip())

    }



data_dicts = [splitter(row) for row in data_list]



team_scores = defaultdict(int)

for game in data_dicts:

    if game['left_score'] == game['right_score']:

        team_scores[game['left']] += 1

        team_scores[game['right']] += 1

    elif game ['left_score'] > game['right_score']:

        team_scores[game['left']] += 3

    else:

        team_scores[game['right']] += 3

    print(team_scores)


teams_sorted = sorted(team_scores.items(), key=lambda team: team[1], reverse=True)



# for line in teams_sorted:

#     print(line)

此外,我需要的预期输出是:


1. Tarantulas, 6 pts

2. Lions, 5 pts

3. FC Awesome, 1 pt

3. Snakes, 1 pt

4. Grouches, 0 pts

我似乎无法弄清楚如何到达这一步。我用打印语句检查了我的大部分代码,看起来字典工作正常,但它没有打印最后一支球队和它的分数(Grouches,0 分)。


我目前得到这个输出:


('Tarantulas', 6)

('Lions', 5)

('Snakes', 1)

('FC Awesome', 1)

任何帮助将不胜感激!


繁花如伊
浏览 113回答 3
3回答

qq_笑_17

添加 CSV 时的代码中断。CSV 阅读器split(',')为您完成。所以你的left_team = row[0]和right_team = row[1]所以你的代码变成了类似的东西def spliter(row):    left_team, right_team = row    return {        'left': left_team[:-2].strip(),        'left_score': int(left_team[-2:].strip()),        'right': right_team[:-2].strip(),        'right_score': int(right_team[-2:].strip())    }with open('data.csv') as data_obj:    reader = csv.reader(data_obj)    data_dicts = [splitter(row) for row in reader]如果你想手动,你可以去纯文本阅读split(',')。with open('data.csv') as data_obj:    data_list = [line.rstrip('\n') for line in data_obj.readlines()]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python