将嵌套列表作为参数传递给方法
Passing nested list as an argument to a method
下面的代码工作正常
class p:
def __init__(self):
self.log={
'name':'',
'id':'',
'age':'',
'grade':''
}
def parse(self,line):
self.log['id']=line[0]
self.log['name']=line[1]
self.log['age']=line[2]
self.log['grade']=line[3].replace('\n',"")
return self.log
obj=p()
with open(r"C:\Users\sksar\Desktop\Azure DE\Datasets\dark.csv",'r') as fp:
line=fp.read()
data=[i.split(',') for i in line.split('\n')]
for i in data:
a=obj.parse(i)
print(a)
输入:
1,jonas,23,A
2,martha,23,B
输出:
{'name': 'jonas', 'id': '1', 'age': '23', 'grade': 'A'}
{'name': 'martha', 'id': '2', 'age': '23', 'grade': 'B'}
问题是:当我在循环外进行方法调用 (a=obj.parse(i)) 时,输入被覆盖并在下面给出 o/p {'name': 'martha', 'id': '2', 'age': '23', 'grade': 'B'}
只是丢失以前的记录。
如何在不必遍历嵌套循环(输入数据)并将数据提供给方法调用的情况下进行方法(解析)调用?如何在没有 for 循环的情况下获得所需的输出...
我不明白你为什么要避免显式循环。我的意思是,即使你没有在你的代码中看到它,如果有东西被迭代,某处就会有一个循环,如果是这样,"explicit is better than implicit".
无论如何,检查这个:
with open(r"C:\Users\sksar\Desktop\Azure DE\Datasets\dark.csv",'r') as fp:
[print(obj.parse(x.split(','))) for x in fp.readlines()]
下面的代码工作正常
class p:
def __init__(self):
self.log={
'name':'',
'id':'',
'age':'',
'grade':''
}
def parse(self,line):
self.log['id']=line[0]
self.log['name']=line[1]
self.log['age']=line[2]
self.log['grade']=line[3].replace('\n',"")
return self.log
obj=p()
with open(r"C:\Users\sksar\Desktop\Azure DE\Datasets\dark.csv",'r') as fp:
line=fp.read()
data=[i.split(',') for i in line.split('\n')]
for i in data:
a=obj.parse(i)
print(a)
输入:
1,jonas,23,A
2,martha,23,B
输出:
{'name': 'jonas', 'id': '1', 'age': '23', 'grade': 'A'}
{'name': 'martha', 'id': '2', 'age': '23', 'grade': 'B'}
问题是:当我在循环外进行方法调用 (a=obj.parse(i)) 时,输入被覆盖并在下面给出 o/p {'name': 'martha', 'id': '2', 'age': '23', 'grade': 'B'}
只是丢失以前的记录。
如何在不必遍历嵌套循环(输入数据)并将数据提供给方法调用的情况下进行方法(解析)调用?如何在没有 for 循环的情况下获得所需的输出...
我不明白你为什么要避免显式循环。我的意思是,即使你没有在你的代码中看到它,如果有东西被迭代,某处就会有一个循环,如果是这样,"explicit is better than implicit".
无论如何,检查这个:
with open(r"C:\Users\sksar\Desktop\Azure DE\Datasets\dark.csv",'r') as fp:
[print(obj.parse(x.split(','))) for x in fp.readlines()]