專注於你的代碼和你在做什麼錯。
你幾乎在與你的無限循環。所以,你想改變你的邏輯,試圖將數據插入到你的字典中。只需使用條件語句來檢查if ';;;'
是否在您的行中。
然後,當您從line.strip().split(' ')
獲得您的密鑰和值時,只需將其分配給您的字典即d[key] = val
即可。然而,你需要一個列表,而val現在是一個字符串,所以在val上調用split。
此外,您不需要需要括號爲key and val
。它向您的代碼提供不需要的噪聲。
最終的結果將會給你:
d = {}
with open('new_file.txt') as f:
for line in f:
if ';;;' not in line:
key, val = line.strip().split(' ')
d[key] = val.split()
print(d)
使用您的樣品輸入,輸出是:
{'C': ['3', '4', '5'], 'A': ['1', '2', '3'], 'B': ['2', '3', '4']}
最後,提供一個改進的實施,因爲它可以製成更Python。我們可以簡化這個代碼,並提供了一個小的改進,以更一般地分裂,而不是明確的計算空間:
with open('new_file.txt') as fin:
valid = (line.split(None, 1) for line in fin if ';;;' not in line)
d = {k:v.split() for k, v in valid}
所以,上面,你會發現我們的分裂看起來是這樣的:split(None, 1)
。我們在哪裏提供maxsplit=1
。
每split
文檔字符串,它說明它非常好:
返回的S中的單詞的列表,使用月作爲 分隔符字符串。如果給出maxsplit,最多maxsplit 拆分完成。如果未指定sep或爲None,則任何 空白字符串都是分隔符,空字符串 已從結果中刪除。
最後,我們簡單地使用字典理解來獲得我們的最終結果。
你可以像這樣使用:return dict([.... Without value'd'。 – JRazor
這段代碼非常糟糕,它不夠靈活,爲什麼使用一個生成器,如果你不會在一行寫這段代碼? – JRazor
@JRazor:FWIW,它是一種字典理解,不是生成器。 –