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)) |
号
您自己的代码应该返回
由于元组是不可变的,因此每次要添加新值时,如果不创建新的元组,也不能像在回答中提到的那样使用元组。
如果你不想要
1 2 3 4 5 6 | from pprint import pprint as pp pp(d) {'Adam': ['12', '34'], 'Dave': ['23', '25'], 'Jack': ['13']} |