我有一个文本文件,它看起来像这样:
zor:10
zor:21
bob:30
qwerty:46
我希望它看起来像{'zor': [10, 21,], 'bob': [30]}
等,但是当我将多个分数添加到名称时,数字会被替换,我将分数分开,以便名称和分数位于不同的位置。
elif schClass == '2':
schClass = open("scores2.txt", 'r')
li = open("scores2.txt", 'r')
data = li.read().splitlines()
for li in data:
name = li.split(":")[0]
score = li.split(":")[1]
if name not in diction1:
diction1[name] = score
elif name in diction1 :
diction1[name] = diction1[name + int(score)]
print(diction1)
答案 0 :(得分:2)
你没有建立名单;只需使用dict.setdefault()
method在缺少密钥时插入一个列表对象,并附加您的值:
diction1 = {}
with open("scores2.txt", 'r') as infile:
for line in infile:
name, _, score = line.partition(':')
diction1.setdefault(name, []).append(int(score))
我冒昧地清理你的代码;我正在使用该文件作为上下文管理器,以便它自动重新关闭。通过直接在文件上循环,您可以获得单独的行,无需先拆分。我使用str.partition()
来分割一次(对于这种情况,它比str.split()
更有效)。
演示:
>>> from io import StringIO
>>> sample = '''\
... zor:10
... zor:21
... bob:30
... qwerty:46
... '''
>>> diction1 = {}
>>> with StringIO(sample) as infile:
... for line in infile:
... name, _, score = line.partition(':')
... diction1.setdefault(name, []).append(int(score))
...
>>> diction1
{'bob': [30], 'qwerty': [46], 'zor': [10, 21]}