2017-04-01 82 views
1

所以我创建了一个关于txt文件“PM.txt”的字典,其中关键是玩家,值是他们的惩罚分钟。我知道字典键必须是唯一的,所以如何更新将键添加到当前值的键的值,因为键在txt文件中存在多次。从.txt文件更新密钥的字典值

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

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

{ '亚历克斯':2, '桑托斯':10, '保罗':2,“尼尔: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 

但我将如何创建一个功能或辅助其返回:

{ '亚历克斯':2, '桑托斯':12, '保罗':7,“尼尔:14}

回答

0

首先转换您minuteint

minutes = int(x[1]) 

然后将其添加到您的字典:

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

在你的厕所P,而不是字典[播放] =分钟:

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() 
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 
1

一对标准库使这个问题变得简单直接。 A defaultdict将创建一个密钥,如果该密钥尚不存在其默认类型,则即使该密钥尚不存在,也可以使用D[key] += valuecsv模块自动分析.csv文件。默认分隔符是逗号。另外请确保不要使用dict作为变量名称。它会覆盖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()}