在 Python 中每行读取以冒号分隔的数据
Reading data separated by colon per line in Python
我正在创建一个程序,其中包含用户名和他们对数据库中数字游戏的猜谜答案 - 类似于 Python 上的格式。我创建了一个文本文件,其中包含所有用户的数据,格式为 name : guess。例如,
Dave:23
Adam:12
Jack:13
Dave:25
Adam:34
现在,我正在尝试将文件作为元组重新读入 Python,因此我决定使用下面的代码行(真正的答案是 17):
dict(line.split(':', 1) for line in open('guesses.txt'))
但这只会让我在 IDLE 中返回一个空行。
为什么这不起作用?
为了让它更简单,我需要一个包含用户名和他们猜测的元组。
我的字典应该是这样的:
{'Dave': 23 25, 'Jack' : 13, 'Adam' : 13 34}
谢谢,德尔伯特。
使用 defaultdict 并将值存储在列表中:
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]})
因此,对于您的文件,只需执行相同的操作即可:
d = defaultdict(list)
with open('guesses.txt') as f:
for line in f:
name,val = line.split(":")
d[name].append(int(val))
您自己的代码应该 return {'Jack': '13', 'Dave': '25', 'Adam': '34'}
其中 Dave 和 Adam 的值在最后两行中被覆盖,因此需要将值存储在列表中并追加。
您也不能像您在回答中提到的那样使用元组,因为元组是 不可变的 ,所以每次您想要添加新值时都需要创建新的元组。
如果您不想要 defaultdict(<class 'list'>,)
,您可以 print(dict(d))
或使用 pprint
from pprint import pprint as pp
pp(d)
{'Adam': ['12', '34'],
'Dave': ['23', '25'],
'Jack': ['13']}
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))
这让你
# result
{ "Dave": [23, 25], "Jack": [13], "Adam": [12, 34] }
我正在创建一个程序,其中包含用户名和他们对数据库中数字游戏的猜谜答案 - 类似于 Python 上的格式。我创建了一个文本文件,其中包含所有用户的数据,格式为 name : guess。例如,
Dave:23
Adam:12
Jack:13
Dave:25
Adam:34
现在,我正在尝试将文件作为元组重新读入 Python,因此我决定使用下面的代码行(真正的答案是 17):
dict(line.split(':', 1) for line in open('guesses.txt'))
但这只会让我在 IDLE 中返回一个空行。
为什么这不起作用?
为了让它更简单,我需要一个包含用户名和他们猜测的元组。
我的字典应该是这样的:
{'Dave': 23 25, 'Jack' : 13, 'Adam' : 13 34}
谢谢,德尔伯特。
使用 defaultdict 并将值存储在列表中:
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]})
因此,对于您的文件,只需执行相同的操作即可:
d = defaultdict(list)
with open('guesses.txt') as f:
for line in f:
name,val = line.split(":")
d[name].append(int(val))
您自己的代码应该 return {'Jack': '13', 'Dave': '25', 'Adam': '34'}
其中 Dave 和 Adam 的值在最后两行中被覆盖,因此需要将值存储在列表中并追加。
您也不能像您在回答中提到的那样使用元组,因为元组是 不可变的 ,所以每次您想要添加新值时都需要创建新的元组。
如果您不想要 defaultdict(<class 'list'>,)
print(dict(d))
或使用 pprint
from pprint import pprint as pp
pp(d)
{'Adam': ['12', '34'],
'Dave': ['23', '25'],
'Jack': ['13']}
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))
这让你
# result
{ "Dave": [23, 25], "Jack": [13], "Adam": [12, 34] }