3 回答
TA贡献1853条经验 获得超9个赞
在某些情况下,列表理解能力很好,但这不是其中之一。只需使用一个循环和一个生成器:
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
TA贡献1798条经验 获得超3个赞
您已经很清楚了,但是您必须将字典放在开头...如果我完全了解您想要的内容,则应该可以进行以下操作:
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
所以我以这种方式忽略了它。让我知道这是否不正确,如果可以,请进一步解释!
TA贡献1966条经验 获得超4个赞
首先编写一个解析aline并返回相应字典的函数:
def parseDataLine(self, line):
return { ... } # Same as your parsing code.
您的其余代码将如下所示:
def getDataElements(self):
return [self.parseDataLine(line) for line in self.data]
这种类型的方法使所有内容都非常易读和简单。
添加回答
举报