打破内部循环并将控制权传递给 python 中的最外层循环
break inner loops and pass control to outermost loop in python
这是我在名为 adm2_geonames 的列表中循环遍历复杂嵌套字典的内容。然后我有一个 csv 文件,其 line[1]
需要在 adm2_geonames 中搜索。一旦找到,我想打破 adm2_geonames 的循环,即从
for dic in adm2_geonames:
并将下一个关键字的控制权传递给 for line in csvReader:
,直到读取 csv 中的所有内容。
我对设置 break 语句的范围感到困惑。我已经尝试为每个内部循环也放置多个 break 语句。似乎,不是正确的做法。
我是初学者python学习者,所以如果我的问题很幼稚,请耐心等待。
coords = []
with open('ADM2_hits.csv') as csvFile:
csvReader = csv.reader(csvFile)
next(csvReader)
for line in csvReader:
keyword = line[1]
for dic in adm2_geonames:
for key in dic:
if(key == "geonames"):
for x in dic[key]:
if(keyword == x['name']):
line.append(x['lat'])
line.append(x['lng'])
coords.append(line)
break
print(coords)
一种方法是使用 else:
块来捕获内循环未被破坏的情况(在这种情况下您想要 continue
),然后是 break
在 else
尚未继续时中断外循环:
coords = []
with open('ADM2_hits.csv') as csvFile:
csvReader = csv.reader(csvFile)
next(csvReader)
for line in csvReader:
keyword = line[1]
for dic in adm2_geonames:
for x in dic["geonames"]:
if(keyword == x['name']):
line.append(x['lat'])
line.append(x['lng'])
coords.append(line)
break
else:
continue
break
print(coords)
请注意,您可以通过直接进入 dic["geonames"]
而不是遍历整个字典来消除一些内部循环;字典的全部意义在于您可以通过键直接跳转到给定的条目,而不必反复搜索整个条目。
一开始你不需要所有这些循环
地方,这意味着你根本不需要 break
。
coords = []
with open('ADM2_hits.csv') as csvFile:
csvReader = csv.reader(csvFile)
next(csvReader)
for line in csvReader:
keyword = line[1]
for dic in adm2_geonames:
try:
line.extend(dic['geonames']['name'][k] for k in ['lat', 'long'])
coords.append(line)
except KeyError:
continue
这是我在名为 adm2_geonames 的列表中循环遍历复杂嵌套字典的内容。然后我有一个 csv 文件,其 line[1]
需要在 adm2_geonames 中搜索。一旦找到,我想打破 adm2_geonames 的循环,即从
for dic in adm2_geonames:
并将下一个关键字的控制权传递给 for line in csvReader:
,直到读取 csv 中的所有内容。
我对设置 break 语句的范围感到困惑。我已经尝试为每个内部循环也放置多个 break 语句。似乎,不是正确的做法。
我是初学者python学习者,所以如果我的问题很幼稚,请耐心等待。
coords = []
with open('ADM2_hits.csv') as csvFile:
csvReader = csv.reader(csvFile)
next(csvReader)
for line in csvReader:
keyword = line[1]
for dic in adm2_geonames:
for key in dic:
if(key == "geonames"):
for x in dic[key]:
if(keyword == x['name']):
line.append(x['lat'])
line.append(x['lng'])
coords.append(line)
break
print(coords)
一种方法是使用 else:
块来捕获内循环未被破坏的情况(在这种情况下您想要 continue
),然后是 break
在 else
尚未继续时中断外循环:
coords = []
with open('ADM2_hits.csv') as csvFile:
csvReader = csv.reader(csvFile)
next(csvReader)
for line in csvReader:
keyword = line[1]
for dic in adm2_geonames:
for x in dic["geonames"]:
if(keyword == x['name']):
line.append(x['lat'])
line.append(x['lng'])
coords.append(line)
break
else:
continue
break
print(coords)
请注意,您可以通过直接进入 dic["geonames"]
而不是遍历整个字典来消除一些内部循环;字典的全部意义在于您可以通过键直接跳转到给定的条目,而不必反复搜索整个条目。
一开始你不需要所有这些循环
地方,这意味着你根本不需要 break
。
coords = []
with open('ADM2_hits.csv') as csvFile:
csvReader = csv.reader(csvFile)
next(csvReader)
for line in csvReader:
keyword = line[1]
for dic in adm2_geonames:
try:
line.extend(dic['geonames']['name'][k] for k in ['lat', 'long'])
coords.append(line)
except KeyError:
continue