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

时间:2013-06-06 01:46:10

标签: python dictionary list-comprehension

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

由于

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 个答案:

答案 0 :(得分: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所以我以这种方式忽略了它。如果这是不正确的,请告诉我,如果有更详细的解释,请告诉我们!

答案 1 :(得分: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

答案 2 :(得分:1)

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

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

您的其余代码将是这样的:

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

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