python代码在完成内部循环后不执行外部循环,但仅适用于第一个元素

时间:2012-12-11 17:54:37

标签: python nested-loops

背景:我有一个哈希,我正在迭代,以一种很好的格式打印它。

示例哈希

Final = {
    'sf_market_flash_subscribers': [
        {'38': './BLMetricsSql.sql'}
    ], 
    'vw_owner_product_bls_only': [
        {'31': './BLMetricsSql.sql'}, 
        {'39': './BLMetricsSql.sql'}, 
        {'62': './BLMetricsSql.sql'}, 
        {'64': './BLMetricsSql.sql'}
    ]
}

我的代码

def printFinal(final):
    for key, value in final.iteritems():
        print key
        print value
        line_num=""
        path=""
        uniqueTables=[]
        for line_and_path in value:
            path=line_and_path.values()[0]
            uniqueTables.append(path)
            print uniqueTables
    print uniqueTables
    uniqueTables=list(set(uniqueTables))
    print uniqueTables
    for unique_path in uniqueTables:
        print unique_path
        for line_and_path in value:
            if line_and_path.values()[0]==unique_path.rstrip():
                line_num = line_and_path.keys()[0]
                print line_num

输出上述代码

sf_market_flash_subscribers
[{'38': './BLMetricsSql.sql'}]
['./BLMetricsSql.sql']
vw_owner_product_bls_only
[{'31': './BLMetricsSql.sql'}, {'39': './BLMetricsSql.sql'}, {'62': './BLMetricsSql.sql'}, {'64': './BLMetricsSql.sql'}]
['./BLMetricsSql.sql']
['./BLMetricsSql.sql', './BLMetricsSql.sql']
['./BLMetricsSql.sql', './BLMetricsSql.sql', './BLMetricsSql.sql']
['./BLMetricsSql.sql', './BLMetricsSql.sql', './BLMetricsSql.sql', './BLMetricsSql.sql']
['./BLMetricsSql.sql', './BLMetricsSql.sql', './BLMetricsSql.sql', './BLMetricsSql.sql']
['./BLMetricsSql.sql']
./BLMetricsSql.sql
31
39
62    
64

查看前4行输出

循环分别打印第1行和第2行中的键和值 然后它在循环内打印唯一表的当前状态 在那之后,BOOM所有剩余的代码都没有被执行,它继续循环遍历最终散列vw_owner_product_bls_only中的第二个元素,然后开始执行它。但是,对于这个元素,内部循环之后的所有代码都被执行,我得到了所需的输出。

那么,为什么其余代码不仅仅针对最终哈希中的第一个元素运行?是因为哈希中的值只有一个元素吗?

2 个答案:

答案 0 :(得分:1)

因为缩进不正确。如果您希望代码在循环内运行,那么它必须比启动循环的语句缩进。

答案 1 :(得分:0)

每次循环时都会初始化uniqueTables,因此循环外的代码只能看到最新的值,即第二个元素。初始化需要处于最外层:

def printFinal(final):
    uniqueTables = []
    for key, value in final.iteritems():
        # etc
    print uniqueTables
    uniqueTables=list(set(uniqueTables))
    # etc