Python 通过列表理解将一行解析到词典中

Python 通过列表理解将一行解析到词典中,python,dictionary,list-comprehension,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(),

我试图使用列表理解将一行的不同部分切分到一个字典列表中。下面的代码不起作用,但它说明了我正在尝试做什么。任何帮助都将不胜感激

谢谢

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

你说得有点清楚,但你必须把字典放在开头……如果我完全理解你的意思,以下几点应该行得通:

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代表x代表行
,但是你没有使用
x
,所以我以这种方式忽略了它。让我知道这是否是错误的,如果是这样,请解释得更详细一点

你说得有点清楚,但你必须把字典放在开头……如果我完全理解你的意思,下面应该可以:

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代表x代表行
,但是你没有使用
x
,所以我以这种方式忽略了它。让我知道这是否是错误的,如果是这样,请解释得更详细一点

有些情况下,列表理解是好的,但这不是其中之一。只需使用回路和发电机:

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()
传递输出:

如果您对此不满意,通常会使用“附加到列表”的方式:

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

有些情况下,列表理解是好的,但这不是其中之一。只需使用回路和发电机:

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()
传递输出:

如果您对此不满意,通常会使用“附加到列表”的方式:

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

首先编写一个函数,解析
,并返回相应的dict:

def parseDataLine(self, line):
    return { ... }   # Same as your parsing code.
其余代码如下所示:

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

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

首先编写一个函数,解析
行,并返回相应的dict:

def parseDataLine(self, line):
    return { ... }   # Same as your parsing code.
其余代码如下所示:

def getDataElements(self):
    return [self.parseDataLine(line) for line in self.data]
这种方法使所有内容都非常可读和简单