关于文本文件:读取Python中每行以冒号分隔的数据

Reading data separated by colon per line in Python

我正在创建一个程序,该程序以类似于数据库的格式在python上创建一个用户名和对猜数游戏的答案。我已经创建了一个文本文件,其中所有用户的数据都是格式名:guess。例如,

1
2
3
4
5
Dave:23
Adam:12
Jack:13
Dave:25
Adam:34

现在,我正尝试将文件作为元组重新读取到python中,因此我决定使用下面的代码行(真正的答案是17):

1
dict(line.split(':', 1) for line in open('guesses.txt'))

但这只会让我在闲着的时候空空如也。为什么这不起作用?为了使它更简单,我需要一个包含用户名和猜测的元组。

我的字典应该是这样的:

1
{'Dave': 23 25, 'Jack' : 13, 'Adam' : 13 34}

谢谢,德尔伯特。


1
2
3
4
5
6
7
from collections import defaultdict

result = defaultdict(list)
with open("guesses.txt") as inf:
    for line in inf:
        name, score = line.split(":", 1)
        result[name].append(int(score))

这让你

1
2
# result
{"Dave": [23, 25],"Jack": [13],"Adam": [12, 34] }


使用默认dict并将值存储在列表中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
s="""Dave:23
Adam:12
Jack:13
Dave:25
Adam:34
"""


from collections import defaultdict
d = defaultdict(list)

for line in s.splitlines():
    name,val = line.split(":")
    d[name].append(int(val))

print(d)
defaultdict(<class 'list'>, {'Jack': [13], 'Adam': [12, 34], 'Dave': [23, 25]})

因此,对于您的文件,只需执行相同的操作:

1
2
3
4
5
d = defaultdict(list)
with open('guesses.txt') as f:
    for line in f:
        name,val = line.split(":")
        d[name].append(int(val))

您自己的代码应该返回{'Jack': '13', 'Dave': '25', 'Adam': '34'},其中dave和adam的值在最后两行中被覆盖,因此需要将值存储在列表中并追加。

由于元组是不可变的,因此每次要添加新值时,如果不创建新的元组,也不能像在回答中提到的那样使用元组。

如果你不想要defaultdict(,),你可以使用print(dict(d))pprint

1
2
3
4
5
6
from pprint import pprint as pp

pp(d)
{'Adam': ['12', '34'],
 'Dave': ['23', '25'],
 'Jack': ['13']}