添加到if循环中的字典

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了添加到if循环中的字典相关的知识,希望对你有一定的参考价值。

我有一个if循环,我正在尝试;

(1)从文件路径创建数据帧。

(2)格式化此数据帧

(3)将该数据帧添加到作为类实例属性的字典中。

这是我定义类和方法的代码:

class myClass:
    def __init__(self, name, filepathlist):
        self.name = name
        self.filepathlist = filepathlist

    def formatData(self):
        i = 0
        self.dataframeDict = {}
        if i < (len(self.filepathlist) - 1):
            DFRAW = pd.read_csv(self.filepathlist[i], header = 9) #Row 9 is the row that is not blank (all blank auto-skipped)
            DFRAW['DateTime'], DFRAW['dummycol1'] = DFRAW['    ;W;W;W;W'].str.split(';', 1).str
            DFRAW['Col1'], DFRAW['dummycol2'] = DFRAW['dummycol1'].str.split(';', 1).str
            DFRAW['Col2'], DFRAW['dummycol3'] = DFRAW['dummycol2'].str.split(';', 1).str
            DFRAW['Col3'], DFRAW['Col4'] = DFRAW['dummycol3'].str.split(';', 1).str
            DFRAW = DFRAW.drop(['    ;W;W;W;W', 'dummycol1', 'dummycol2', 'dummycol3'], axis = 1)

            dictIndex = self.filepathlist[i][39:44]

            self.dataframeDict.update({dictIndex: DFRAW})
            i = i + 1         

然后我创建一个类的实例并运行该方法:

filepathlist = ['filepath1','filepath2']
myINST = myClass('Mydataname', filepathlist)
myINST.formatData()

然后我期望myINST.dataframeDict根据2个输入文件路径有两个数据帧,因此if循环有2次迭代。但是只有1。

我的代码或方法中的错误是什么?

答案

很难说这是否能完全解决您的问题,因为没有提供虚拟数据。但是,如果用if i < (len(self.filepathlist) - 1):替换while i < (len(self.filepathlist) - 1):,您将更接近解决方案。

您目前只是检查i=0是否小于len(self.filepathlist)-1。如果是,则if块执行一次。你实际上寻找的是一个循环,只要i小于len(self.filepathlist)-1,就会继续迭代。这是通过while-loops完成的。

另一答案

你需要将你的状况改为for i in range(len(self.filepathlist)):

(另外,删除i的赋值,因为for循环自动执行。出于同样的原因,你还应该删除增加i的行)。

另一答案

如果要使用while循环,请将if行更改为while i < len(self.filepathlist):

请注意,没有-1。这是因为你使用的是<而不是<=。如果你想使用-1,那么你还需要<=,因为这将确保循环运行正确的次数。

以上是关于添加到if循环中的字典的主要内容,如果未能解决你的问题,请参考以下文章

在字典中添加密钥之前,如何使用循环?

比较两个字典并将识别的键和值差异添加到新字典

在for循环中排除字典中的项目,并在字典中使用if和 else。

将片段添加到片段中(嵌套片段)

在 JSP 中的 <% %> 代码片段中添加链接

我可以在 for 循环中将键值对添加到 NSarray 或字典吗?