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

我正在尝试使用列表推导将一行的不同部分切成字典列表。下面的代码不起作用,但是它说明了我正在尝试做的事情。任何帮助将非常感激!


谢谢


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]]


MM们
浏览 218回答 3
3回答

暮色呼如

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

呼如林

您已经很清楚了,但是您必须将字典放在开头...如果我完全了解您想要的内容,则应该可以进行以下操作: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所以我以这种方式忽略了它。让我知道这是否不正确,如果可以,请进一步解释!

慕标5832272

首先编写一个解析aline并返回相应字典的函数:def parseDataLine(self, line):    return { ... }   # Same as your parsing code.您的其余代码将如下所示:def getDataElements(self):    return [self.parseDataLine(line) for line in self.data]这种类型的方法使所有内容都非常易读和简单。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python