我想將以下資料分組到字典中,并在串列中添加名稱部分和等級
我的輸入資料:
mystring = """STUDENT;SECTION;GRADE
Abordo;BSIT4A;2.25
Agustin;BSIT4A;1.75
Asiatico;BSIT4A;3.00
Asilo;BSIT4A;2.75
Bernabe;BSIT4A;2.25
Borja;BSIT4A;2.00
Botabara;BSIT4A;3.00
Cagoco;BSIT4A;3.00
Cari?o;BSIT4A;3.00
Cruz;BSIT4A;3.00
Dapatnapo;BSIT4A;3.00
Darupan;BSIT4A;2.25
Delos Reyes;BSIT4A;3.00
Ono;BSIT4A;3.00
Torres;BSIT4A;2.50
Ugale;BSIT4A;2.25
Elpedes;BSIT4B;3.00
Endozo;BSIT4B;2.50
Estrada;BSIT4B;3.00
Evangelista;BSIT4B;2.75
Fernandez;BSIT4B;3.00
Flores;BSIT4B;3.00
Gayeta;BSIT4B;2.25
Gernale;BSIT4B;2.25
Guarino;BSIT4B;2.50
Lecaros;BSIT4B;3.00
Legarda;BSIT4B;2.50
Longcop;BSIT4B;2.75
Mabansag;BSIT4B;2.75
Malaluan;BSIT4B;2.50
Manaba;BSIT4B;2.25
Manarin;BSIT4B;3.00
Mengol;BSIT4B;3.00
Opriasa;BSIT4B;2.50
Pangan;BSIT4B;1.75
Cortez;BSIT4C;3.00
Pantilag;BSIT4C;2.25
Penuliar;BSIT4C;3.00
Relojo;BSIT4C;3.00
Reyes;BSIT4C;2.75
Salazar;BSIT4C;3.00
Santiago;BSIT4C;2.25
Seberre;BSIT4C;3.00
Suayan;BSIT4C;3.00
Sulit;BSIT4C;3.00
Tejada;BSIT4C;2.50
Tura;BSIT4C;2.25
Tuvieron;BSIT4C;1.75
Vicente;BSIT4C;2.25
Yacub;BSIT4C;2.75"""
到目前為止我的代碼:
a = mystring.split("\n")
for i, j in enumerate(a):
a[i] = j.replace(";",":")
heading = mystring[0]
我想根據以下組將它們分開:
{
'STUDENT': ['Abordo', 'Agustin', ...],
'SECTION': ['BSIT4A', 'BSIT4A', ...],
'GRADE': [2.25, 1.75, ...]
}
如果你能告訴我我真的很感激,我是 python 新手。我已經這樣做了,以便可以將字串更改為半列分隔符
uj5u.com熱心網友回復:
給定資料的縮短版本:
mystring = """STUDENT;SECTION;GRADE
Abordo;BSIT4A;2.25
Agustin;BSIT4A;1.75
Asiatico;BSIT4A;3.00
Asilo;BSIT4A;2.75
Bernabe;BSIT4A;2.25
Borja;BSIT4A;2.00
Botabara;BSIT4A;3.00"""
我可能會做的第一件事是將其重新塑造成“串列串列”或字典串列。讓我們做一個串列串列。
rows = [
[cell.strip() for cell in row.split(";")]
for row in mystring.split("\n")
]
在這一點上,我們可以查看我們所擁有的 a print():
[
['STUDENT', 'SECTION', 'GRADE'],
['Abordo', 'BSIT4A', '2.25'],
['Agustin', 'BSIT4A', '1.75'],
['Asiatico', 'BSIT4A', '3.00'],
['Asilo', 'BSIT4A', '2.75'],
['Bernabe', 'BSIT4A', '2.25'],
['Borja', 'BSIT4A', '2.00'],
['Botabara', 'BSIT4A', '3.00']
]
現在我們可以使用第一行中的資料作為字典的鍵來重塑它,并將相應的值附加到串列中。
headers = rows[0]
results = collections.defaultdict(list)
for row_values in rows[1:]:
for column_index, column_name in enumerate(headers):
results[column_name].append(row_values[column_index])
我們可以再次列印我們必須看到的內容:
{
'STUDENT': ['Abordo', 'Agustin', 'Asiatico', 'Asilo', 'Bernabe', 'Borja', 'Botabara'],
'SECTION': ['BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4A'],
'GRADE': ['2.25', '1.75', '3.00', '2.75', '2.25', '2.00', '3.00']
}
請注意,pandas如果您想探索它,該模塊將為您完成大部分作業。
uj5u.com熱心網友回復:
這是另一種方法。
首先你用換行符分割每一行'\n'。這將創建一個字串串列。然后你去掉每個字串左側的空格并在';'. 這將創建一個串列串列,lsts.
您使用解包運算子*將子串列解包為元組,其中在每個元組中,第一項是鍵,其余項是值。您使用 dict 理解來創建您想要的結果。
lsts = [x.lstrip().split(';') for x in mystring.split('\n')]
out = {tpl[0]: list(tpl[1:]) for tpl in zip(*lsts)}
與單行代碼相同的代碼:
out = {tpl[0]: list(tpl[1:]) for tpl in zip(*[x.lstrip().split(';') for x in mystring.split('\n')])}
最后,如果您需要創建轉換'GRADE'為浮點數而不是字串,您可以執行以下操作:
out['GRADE'][:] = map(float, out['GRADE'])
輸出:
{'STUDENT': ['Abordo', 'Agustin', 'Asiatico', 'Asilo', 'Bernabe', 'Borja', 'Botabara', 'Cagoco', 'Cari?o',
'Cruz', 'Dapatnapo', 'Darupan', 'Delos Reyes', 'Ono', 'Torres', 'Ugale', 'Elpedes', 'Endozo',
'Estrada', 'Evangelista', 'Fernandez', 'Flores', 'Gayeta', 'Gernale', 'Guarino', 'Lecaros',
'Legarda', 'Longcop', 'Mabansag', 'Malaluan', 'Manaba', 'Manarin', 'Mengol', 'Opriasa', 'Pangan',
'Cortez', 'Pantilag', 'Penuliar', 'Relojo', 'Reyes', 'Salazar', 'Santiago', 'Seberre', 'Suayan',
'Sulit', 'Tejada', 'Tura', 'Tuvieron', 'Vicente', 'Yacub'],
'SECTION': ['BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4A',
'BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4A', 'BSIT4B', 'BSIT4B', 'BSIT4B', 'BSIT4B',
'BSIT4B', 'BSIT4B', 'BSIT4B', 'BSIT4B', 'BSIT4B', 'BSIT4B', 'BSIT4B', 'BSIT4B', 'BSIT4B', 'BSIT4B',
'BSIT4B', 'BSIT4B', 'BSIT4B', 'BSIT4B', 'BSIT4B', 'BSIT4C', 'BSIT4C', 'BSIT4C', 'BSIT4C', 'BSIT4C',
'BSIT4C', 'BSIT4C', 'BSIT4C', 'BSIT4C', 'BSIT4C', 'BSIT4C', 'BSIT4C', 'BSIT4C', 'BSIT4C', 'BSIT4C'],
'GRADE': [2.25, 1.75, 3.0, 2.75, 2.25, 2.0, 3.0, 3.0, 3.0, 3.0, 3.0, 2.25, 3.0, 3.0, 2.5, 2.25, 3.0, 2.5, 3.0,
2.75, 3.0, 3.0, 2.25, 2.25, 2.5, 3.0, 2.5, 2.75, 2.75, 2.5, 2.25, 3.0, 3.0, 2.5, 1.75, 3.0, 2.25, 3.0,
3.0, 2.75, 3.0, 2.25, 3.0, 3.0, 3.0, 2.5, 2.25, 1.75, 2.25, 2.75]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/407308.html
標籤:
上一篇:索引為偶數的反向串列
