首页 > 解决方案 > 如何在 Python 中以列表为变量调用 API 函数?

问题描述

我有一个 python 脚本,它通过 overpass-API 成功地从 OSM 中提取 POI(兴趣点)数据。有三个输入变量符合请求:“country_code”、“master_type”和“value_type”

overpass_query = f"""
[out:json];

area["ISO3166-1"="{country_code}"][admin_level=2];

( node["{master_type}"="{value_type}"](area);
  way["{master_type}"="{value_type}"](area);
  rel["{master_type}"="{value_type}"](area);
  
);
out center;
"""

response = requests.get(overpass_url, 
                        params={'data': overpass_query})
data = response.json()

虽然我有“country_code”和“master_type”的单一值,但有多个“value_type”。为此,我创建了一个名为 value_type_list 的列表

value_type_list = ['restaurant','fuel','casino']

我想为value_type变量中的每个value_type_list循环这个脚本。如何才能做到这一点?

非常感谢!

标签: pythonlistloops

解决方案


只需这样做:

country_code = 1
master_type = "Some value"

for value_type in ['restaurant','fuel','casino'] :
    overpass_query = f"""
    [out:json];
    area["ISO3166-1"="{country_code}"][admin_level=2];
    ( node["{master_type}"="{value_type}"](area);
      way["{master_type}"="{value_type}"](area);
      rel["{master_type}"="{value_type}"](area);
    );
    out center;
    """
    print(overpass_query)

输出:

    [out:json];
    area["ISO3166-1"="1"][admin_level=2];
    ( node["Some value"="restaurant"](area);
      way["Some value"="restaurant"](area);
      rel["Some value"="restaurant"](area);
    );
    out center;
    

    [out:json];
    area["ISO3166-1"="1"][admin_level=2];
    ( node["Some value"="fuel"](area);
      way["Some value"="fuel"](area);
      rel["Some value"="fuel"](area);
    );
    out center;
...

推荐阅读