将多个分数附加到python词典中的一个条目

时间:2015-01-28 13:07:26

标签: python python-3.x dictionary

我有一个文本文件,它看起来像这样:

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)

1 个答案:

答案 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]}