打破内部循环并将控制权传递给 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),然后是 breakelse 尚未继续时中断外循环:

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