我正在尝试使用列表推导将一行的不同部分切换为字典列表。下面的代码不起作用,但它说明了我想要做的事情。任何帮助将不胜感激!
由于
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]]
答案 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]
这种方法使所有内容都非常易读和简单。