使用namitm的反向地理编码似乎根据位置的大小返回“town”或“city”。你知道吗
import geojson
from geopy.geocoders import Nominatim
location = "48.84837905, 2.28229522311902"
geolocator = Nominatim(user_agent="my-application",timeout=3)
location = geolocator.reverse(location)
print(location.raw)
#Sometimes "town", sometimes "city"
##print(location.raw['address']['town'])
##print(location.raw['address']['city'])
处理这两种情况的好方法是什么?你知道吗
谢谢你。你知道吗
这正是
try-except
的目的:备选方案
一些注重性能的人会说“但是尝试是昂贵的”。你知道吗
您可以使用其他替代方案:
if 'town' in location.raw['address']: ... else: ...
location.raw['address'].get('town', location.raw['address'].get('city'))
每种方法都有其优缺点。^例如,{}并不懒惰。
location.raw['address'].get('city')
将 在查找'town'
之前进行评估,因此事实上,它比 浪费的和适得其反的。if-else
方法(取决于它的使用方式)可能需要对其中一个键进行两次哈希运算。你知道吗我认为在
try
块中放置更常见的键就足够了。你知道吗让我们做一些测试:
这个输出
这意味着在这个2000个字典的例子中,
if-else
是最快的(即使它需要对其中一个键进行两次散列),而try-except
和get
是差不多的。你知道吗相关问题 更多 >
编程相关推荐