python代码在完成内部循环后不执行外部循环,而只执行第一个元素
背景:我有一个散列,我正在迭代它以一个好的格式打印它 样本哈希python代码在完成内部循环后不执行外部循环,而只执行第一个元素,python,nested-loops,Python,Nested Loops,背景:我有一个散列,我正在迭代它以一个好的格式打印它 样本哈希 Final = { 'sf_market_flash_subscribers': [ {'38': './BLMetricsSql.sql'} ], 'vw_owner_product_bls_only': [ {'31': './BLMetricsSql.sql'}, {'39': './BLMetricsSql.sql'}, {'62'
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
上述代码的输出
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行打印键和值
然后打印循环中唯一表的当前状态
在那之后,所有剩余的代码都不会被执行,它只在最终散列vw_owner_product_bls_中的第二个元素上循环,然后开始执行它。然而,对于这个元素,内部循环执行后的所有代码,我得到了所需的输出
那么,为什么代码的其余部分不只是针对最终散列中的第一个元素运行呢?是否因为哈希中的值只有一个元素?因为缩进不正确。如果希望代码在循环内运行,则必须将其缩进到比启动循环的语句更深的位置。每次循环时都会初始化uniqueTables,因此循环外的代码只能看到最新的值,即第二个元素。初始化需要在最外层进行:
def printFinal(final):
uniqueTables = []
for key, value in final.iteritems():
# etc
print uniqueTables
uniqueTables=list(set(uniqueTables))
# etc
请更正缩进,使其与正在运行的代码完全相同。是的,缩进就是问题所在。谢谢