Python列表将打印但不返回

2024-09-25 16:21:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理一个csv文件的代码,然后返回csv文件中每一行的数据点列表。名单将按日期和地点排序。在

该代码按照我想要的方式生成列表,但在调用时不返回列表。在

第一个函数读取文件并生成数据点。第二个函数调用第一个函数,排序并(希望)返回数据

def CreateDataStructure(data):
allData=[]
with open(data,'r') as data:

    dataRead=data.readlines()
    for line in dataRead[1:]:
        splitList=line.split(",")
        dataPoint =[splitList[25],splitList[1],{splitList[19]:splitList[9]}]
        allData.append(dataPoint)
sortedData=sorted(allData)
return sortedData


def compileData(filename,counter,sortedData):    
    if counter==0:
        sortedData=CreateDataStructure(filename)
        compileData(filename,1,sortedData)
    else:
        if counter<len(sortedData):

            if sortedData[0][0]==sortedData[1][0] and sortedData[0][1]==sortedData[1][1]:#change these back
                compDict=dict(list(sortedData[0][2].items())+list(sortedData[1][2].items()))
                sortedData[0]=[sortedData[0][0],sortedData[0][1],compDict]    
                sortedData.pop(1)
                compileData(filename,counter,sortedData)
                counter=counter+1
            else:
                sortedData+=[sortedData.pop(0)]
                counter=counter+1
                compileData(filename,counter,sortedData)
        else:
           from itertools import groupby
            for key, locationGroup in groupby(sortedData, lambda x: x[0]):
                bigList=[]
                smallList=[]
                    for date in locationGroup:
                    smallList.append(date)
                    bigList.append(smallList)
            print bigList
            return bigList

print compileData("fakeData.csv",0,[]) 

当我运行这段代码时,它输出我想要的(biglist,我粘贴在下面以防您怀疑),但是返回None(noneType对象)。为什么退回和打印会产生两种不同的情况,我如何解决这一问题?在

[[['744701', '40974', {'Alkalinity': '234'}], ['744701', '41018', {'Alkalinity': '252'}], ['744701', '41058', {'Alkalinity': '270.53'}]], [['744701', '40974', {'Alkalinity': '234'}], ['744701', '41018', {'Alkalinity': '252'}], ['744701', '41058', {'Alkalinity': '270.53'}]], [['744701', '40974', {'Alkalinity': '234'}], ['744701', '41018', {'Alkalinity': '252'}], ['744701', '41058', {'Alkalinity': '270.53'}]]]


Tags: 文件csv数据代码列表fordatacounter
1条回答
网友
1楼 · 发布于 2024-09-25 16:21:18

您的compileData函数有多个执行分支,这意味着它可以在多个点返回。但是,只有其中一个counter !=0 and counter >= len(sortedData)即最后一个else分支返回任何内容。在

例如:

if counter==0:
    sortedData=CreateDataStructure(filename)
    compileData(filename,1,sortedData)

即使这个compileData调用设法到达最后一个else分支,也就是打印并返回结果的分支,结果实际上什么也不做。这意味着在compileData(filename,1,sortedData)完成后,它返回的数据将被丢弃,函数执行将继续,直到它最终到达结尾并隐式返回None。在

这应该可以解决这个问题:

^{pr2}$

更新

您可以通过returning early而不是嵌套多个ifs使您的函数(主观上)更易于理解。您的函数将如下所示:

^{3}$

相关问题 更多 >