为了账号安全,请及时绑定邮箱和手机立即绑定

通过列表理解将行解析为字典

通过列表理解将行解析为字典

MM们 2021-03-24 22:14:14
我正在尝试使用列表推导将一行的不同部分切成字典列表。下面的代码不起作用,但是它说明了我正在尝试做的事情。任何帮助将非常感激!谢谢def getDataElements(self):    return [x for x for line in self.data: {"Number": line[0:9],            "FullName": line[9:27].rstrip(),            "LastName": line[27:63].rstrip(),            "Area": line[63:65].rstrip(),            "City": line[65:90].rstrip(),            "Status": line[91],            "Status2": line[92],            "Status3": line[93]]
查看完整描述

3 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

在某些情况下,列表理解能力很好,但这不是其中之一。只需使用一个循环和一个生成器:


for line in self.data:

    yield {

        "Number": line[0:9],

        "FullName": line[9:27].rstrip(),

        "LastName": line[27:63].rstrip(),

        "Area": line[63:65].rstrip(),

        "City": line[65:90].rstrip(),

        "Status": line[91],

        "Status2": line[92],

        "Status3": line[93]

    }

如果您绝对需要返回列表,则将输出传递给list():


output_list = list(self.getDataElements())

如果您对此感到不满意,则始终可以使用“追加到列表”的方式:


people = []


for line in self.data:

    people.append({

        "Number": line[0:9],

        "FullName": line[9:27].rstrip(),

        "LastName": line[27:63].rstrip(),

        "Area": line[63:65].rstrip(),

        "City": line[65:90].rstrip(),

        "Status": line[91],

        "Status2": line[92],

        "Status3": line[93]

    })


return people


查看完整回答
反对 回复 2021-03-30
?
呼如林

TA贡献1798条经验 获得超3个赞

您已经很清楚了,但是您必须将字典放在开头...如果我完全了解您想要的内容,则应该可以进行以下操作:

return [{"Number": line[0:9],"FullName": line[9:27].rstrip(),"LastName": line[27:63].rstrip(),"Area": line[63:65].rstrip(),"City": line[65:90].rstrip(),"Status": line[91],"Status2": line[92],"Status3": line[93]} for line in self.data]

除非有一些额外的嵌套层次,因为您说x for x for line尚未使用,x所以我以这种方式忽略了它。让我知道这是否不正确,如果可以,请进一步解释!


查看完整回答
反对 回复 2021-03-30
?
慕标5832272

TA贡献1966条经验 获得超4个赞

首先编写一个解析aline并返回相应字典的函数:


def parseDataLine(self, line):

    return { ... }   # Same as your parsing code.

您的其余代码将如下所示:


def getDataElements(self):

    return [self.parseDataLine(line) for line in self.data]

这种类型的方法使所有内容都非常易读和简单。


查看完整回答
反对 回复 2021-03-30
  • 3 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信