我正在從檔案中提取此文本塊以轉換為字典:
ACC210:
Luther, Martin
Spurgeon, Charles
CS121P:
Bunyan, John
Henry, Matthew
Luther, Martin
CS132S:
Calvin, John
Knox, John
Owen, John
這是我用來打開它并創建兩個串列的代碼,以便我可以使用它們來創建字典:
with open("classes.txt") as file:
data = [line.strip() for line in file]
a = []
b = []
for x in data:
if ':' in x:
a.append(x)
else:
b.append(x)
名單出來了
['ACC210:', 'CS121P:', 'CS132S:']
['Luther, Martin', 'Spurgeon, Charles', '', 'Bunyan, John', 'Henry, Matthew', 'Luther, Martin', '', 'Calvin, John', 'Knox, John', 'Owen, John', '']
但是我需要第二個串列看起來像這樣:
[['Luther, Martin', 'Spurgeon, Charles'],['Bunyan, John', 'Henry, Matthew','Luther, Martin'], ['Calvin, John', 'Knox, John', 'Owen, John']]
我該怎么做?
uj5u.com熱心網友回復:
您可以嘗試以下操作:
lst1, lst2 = [], []
with open('input.txt', 'r') as f:
for line in map(lambda x: x.rstrip('\n'), f):
if ':' in line:
lst1.append(line)
lst2.append(names := [])
elif line:
names.append(line)
print(lst1) # ['ACC210:', 'CS121P:', 'CS132S:']
print(lst2)
# [['Luther, Martin', 'Spurgeon, Charles'], ['Bunyan, John', 'Henry, Matthew', 'Luther, Martin'], ['Calvin, John', 'Knox, John', 'Owen, John']]
該行lst2.append(names := [])需要 python 3.8 。如果該行不適合您,請使用:
names = []
lst2.append(names)
uj5u.com熱心網友回復:
如果您正在嘗試制作 dict,則可以執行以下操作:
import re
di={}
with open(fn) as f:
for k,v in re.findall(r'(^.*):([\s\S]*?)(?=^$|\Z)', f.read(), flags=re.M):
di[k]=v.strip().splitlines()
>>> di
{'ACC210': ['Luther, Martin', 'Spurgeon, Charles'], 'CS121P': ['Bunyan, John', 'Henry, Matthew', 'Luther, Martin'], 'CS132S': ['Calvin, John', 'Knox, John', 'Owen, John']}
如果你想要兩個串列:
import re
a,b=[],[]
with open(fn) as f:
for k,v in re.findall(r'(^.*):([\s\S]*?)(?=^$|\Z)', f.read(), flags=re.M):
a.append(k)
b.append(v.strip().splitlines())
>>> a
['ACC210', 'CS121P', 'CS132S']
>>> b
[['Luther, Martin', 'Spurgeon, Charles'], ['Bunyan, John', 'Henry, Matthew', 'Luther, Martin'], ['Calvin, John', 'Knox, John', 'Owen, John']]
您也可以在沒有正則運算式的情況下執行此操作:
a,b=[],[]
with open(fn) as f:
for k, sl in ((sl[0], sl[1:])
for sl in (e.splitlines()
for e in f.read().rstrip().split('\n\n'))):
a.append(k.rstrip(':'))
b.append(sl)
# same a,b
同樣的方法你可以直接創建一個字典:
with open(fn) as f:
di={sl[0]:sl[1:] for sl in (e.splitlines()
for e in f.read().rstrip().split('\n\n'))}
>>> di
{'ACC210:': ['Luther, Martin', 'Spurgeon, Charles'], 'CS121P:': ['Bunyan, John', 'Henry, Matthew', 'Luther, Martin'], 'CS132S:': ['Calvin, John', 'Knox, John', 'Owen, John']}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/375701.html
上一篇:需要使用字典列印輸出
