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]
这种方法使所有内容都非常可读和简单