[英]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}
謝謝,德爾伯特。
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] }
使用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))
您自己的代碼應返回{'Jack': '13', 'Dave': '25', 'Adam': '34'}
,其中Dave和Adam的值在最后兩行被覆蓋,因此需要存儲列表中的值並追加。
由於元組是不可變的,因此每次您要添加新值時也不能創建新元組,就不能使用答案中提到的元組。
如果不想使用defaultdict(<class 'list'>,)
pprint
defaultdict(<class 'list'>,)
可以print(dict(d))
或使用pprint
from pprint import pprint as pp
pp(d)
{'Adam': ['12', '34'],
'Dave': ['23', '25'],
'Jack': ['13']}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.