如果字典值不存在,JSON解析循环将跳过



我使用OpenStreetMap API来提取关于特定区域的一些数据,使用以下代码:

import requests
import json
overpass_url = "http://overpass-api.de/api/interpreter"
overpass_query = """
[out:json];
area["ISO3166-1"="DE"][admin_level=2];
(node["amenity"="place_of_worship"](area);
way["amenity"="place_of_worship"](area);
rel["amenity"="place_of_worship"](area);
);
out center;
"""
response = requests.get(overpass_url, 
params={'data': overpass_query})
data = response.json()

然后,我尝试使用以下代码打印出上面的所有"名称":

for tags in data['elements']:
print(tags['tags']['name'])

这对于前12个左右的结果来说很好,但当它在"标签"字典中遇到没有"名称"值的结果时就会遇到问题:

Epiphanias Kirche
Kirche St. Bilhildis
Kleine Kreuzkirche
Marienkapelle
Kath. Kirche Heilige Familie
St. Cyriakus
Friedhofskapelle
Ev. Hoffnungsgemeinde / Philippuszentrum
Petrikirche
Sankt Paulus
Kapelle Höver
Pfarrkirche St. Laurentius
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-81-5758361aa6f2> in <module>()
1 for tags in data['elements']:
----> 2     print(tags['tags']['name'])
3 
4 #error occurs because not all have name tags
KeyError: 'name'

有没有一种方法可以跳过任何丢失的"name"值,继续解析?

尝试使用dict.get

例如:

for tags in data['elements']:
print(tags['tags'].get('name'))

您也可以设置默认值。例如:print(tags['tags'].get('name', "EMPTY"))

最新更新