拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 我想将某些东西分组以成为字典和串列。还根据标题对它们进行分组

我想将某些东西分组以成为字典和串列。还根据标题对它们进行分组

白鹭 - 2022-01-24 2164 0 0

我想将以下资料分组到字典中,并在串列中添加名称部分和等级

我的输入资料:

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]}
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *