从.txt文件更新密钥的字典值

时间:2017-04-01 23:33:13

标签: python dictionary

所以我已经在txt文件中创建了一个词典" PM.txt"关键是玩家,价值是他们的罚分。我知道字典键必须是唯一的,所以我如何更新键的值,将其添加到当前值,因为键在txt文件中不止一次存在。

    "PM.txt"
    Neil,2
    Paul,5
    Neil,10
    Santos,2
    Neil,2
    Santos,10
    Paul,2
    Alex,2

到目前为止,我有这个回复:

{' Alex':2,' Santos':10,' Paul':2,' Neil':2}

    def pm_dict(filename):
        f = open(filename, 'r')
        dict = {}
        for line in f:
            x = line.split(",")
            player = x[0]
            minutes = x[1]
            c = len(minutes)-2
            minutes = minutes[0:c]
            dict[player] = minutes

        return dict

但是我如何为它返回创建一个函数或帮助器:

{' Alex':2,' Santos':12,' Paul':7,' Neil':14}

4 个答案:

答案 0 :(得分:1)

一些标准库使这个问题变得简单明了。如果defaultdict尚未存在其默认类型,则D[key] += value会创建一个密钥,因此即使密钥尚不存在,您也可以使用csvdict模块自动解析.csv文件。默认分隔符是逗号。另外,请确保不要将dict用作变量名。它会覆盖from collections import defaultdict import csv def pm_dict(filename): D = defaultdict(int) with open(filename, 'r', newline='') as f: r = csv.reader(f) for key,value in r: D[key] += int(value) return dict(D) # converts back to a standard dict, but not required. print(pm_dict('PM.txt')) 类型。

{'Neil': 14, 'Paul': 7, 'Alex': 2, 'Santos': 12}

输出:

return {k:str(v) for k,v in D.items()}

这些值作为数字更有意义,但如果您想要值示例中的值字符串,则函数的最后一行可以是以下内容,以将值转换回字符串。这是词典理解

pause()

答案 1 :(得分:0)

你的for循环中的

,而不是dict [player] =分钟:

if player not in dict:
    dict[player] = 0

dict[player] += minutes

此外,而不是:

        minutes = x[1]
        c = len(minutes)-2
        minutes = minutes[0:c]

你可以这样做:

minutes = x[1].strip()

答案 2 :(得分:0)

首先将您的minute转换为int

minutes = int(x[1])

然后将其添加到词典中:

if player in dict:
  dict[player] += minutes
else:
  dict[player] = minutes

答案 3 :(得分:0)

只需使用defaultdict

def pm_dict(filename):
    f = open(filename, 'r')
    dict = defaultdict(int)
    for line in f:
        x = line.split(",")
        player = x[0]
        minutes = x[1]
        c = len(minutes)-2
        minutes = minutes[0:c]
        dict[player] += int(minutes)

    return dict

重构后:

import csv
from collections import defaultdict

...

def get_penalty_minutes_dict(filename):
    result_dict = defaultdict(int)
    with open(filename, 'r') as f:           
       for player, minutes in csv.reader(f):
           result_dict[player] += int(minutes)

    return result_dict