0

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

谢谢

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

3 回答 3

2

你有点清楚,但你必须把字典放在开头......如果我完全理解你想要什么,下面应该工作:

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所以我以这种方式忽略了它。让我知道这是否不正确,如果是,请更详细地解释一下!

于 2013-06-06T01:50:30.933 回答
1

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

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
于 2013-06-06T01:51:09.007 回答
1

先写一个解析aline并返回对应dict的函数:

def parseDataLine(self, line):
    return { ... }   # Same as your parsing code.

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

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

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

于 2013-06-06T02:09:16.307 回答