所以我已经在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}
答案 0 :(得分:1)
一些标准库使这个问题变得简单明了。如果defaultdict
尚未存在其默认类型,则D[key] += value
会创建一个密钥,因此即使密钥尚不存在,您也可以使用csv
。 dict
模块自动解析.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)
,而不是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