【问题标题】:Iterate Nested Loops迭代嵌套循环
【发布时间】:2014-10-22 11:31:57
【问题描述】:

我有一个list 和一个dict

一旦我进入嵌套的for 循环,第一个for 循环就不会继续遍历这些值。这只允许我迭代一次,无论我的 if 语句是否成功。

for OldRecord in StripOldList:
    OldSplitRec = OldRecord.split('_')
    value1 = OldSplitRec[1]
    value2 = OldSplitRec[2]
    value3 = OldSplitRec[3]
    value3 = OldSplitRec[4]
    value3 = OldSplitRec[5]

    diffdict = {}
    for SomeRec in DiffSplitText:
        key1, key2, key3, key4, key5= SomeRec.strip().split('_')
        FinalLabel = key1+"_"+key2+"_"+key3+"_"+key4+"_"key5+"_"+key6
        diffdict[key1,key2,key3,key4,key5.strip()] = FinalLabel

        IsNewEdition = True
        IsNewVersion =  True
        IsNewFileType = True

        if (value1 == key1 and value2 == key2):
           IsNewFileType = False

           if (value3 >= key3):
               IsNewEdition = False

           if (value5 >= key5):
               IsNewVersion = False
        if (IsNewFileType == True):
           print "No Match"
        elif (IsNewEdiion == True):
           print  "Found new edition"
           link1.write(SomeRec)
        elif (IsNewVersion == True):
           print "Found new version"
           link2.write(SomeRec)

然后,例如,我将value1key1value5key6 进行比较。我的if 语句有效,但只执行一次,所以这是我唯一关心的部分。

读取的文件示例如下:

Ex_299_Jabba_1993_09_20150805

所以如果旧列表有:

Ex_299_Jabba_1993_09_20130805
Ex_298_Jabba_1993_09_20130805
Ex_297_Jabba_1993_09_20130805

而新词典有:

Ex_299_Jabba_1993_09_20140805
Ex_298_Jabba_1994_09_20130805
Ex_297_Jabba_1993_09_20130805

它应该识别字典中更新的文件名并将它们写入正确的位置(用**强调)。

Ex_299_Jabba_1993_09_**20140805**
Ex_298_Jabba_**1994**_09_20130805

【问题讨论】:

  • 向我们展示工作,完整的示例代码。
  • 什么是DiffSplitText?如果您想比较所有可能的配对,请查看itertools.combinations
  • DiffSplitText 只是它从中提取文件名的文本文件

标签: list python-2.7 for-loop dictionary nested-loops


【解决方案1】:

来自您的评论:

DiffSplitText 只是它从中提取文件名的文本文件

这就是问题所在:如果DiffSplitTextfile 对象,那么它就是一个迭代器。你的嵌套循环

for SomeRec in DiffSplitText:

迭代文件中的所有行,但在第一次迭代之后,that file iterator is exhausted!

如果你想再次读取这些行,你必须重置迭代器,在外循环的每次迭代中使用DiffSplitText.seek(0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多