当我进行不同的测试时,我发现了一个问题,当我调用google.places()时,我无法通过[' rating] .values对数据进行排序。 例如,如果我通过[' name']查询数据和排序,它就可以正常工作。 示例如下:
gmaps = googlemaps.Client(key='key_is_here')
nyc = (40.6971494, -74.2598655)
msk = (55.7535081, 37.6144299)
new_arr = []
params = {
'query': ['restaurants', 'bakery', 'cafe', 'food'],
'location': nyc
'radius': 10000
}
gmapz = gmaps.places(**params)
print sorted(gmapz['results'], key = lambda x : x['name'],reverse = True):
""" outputs list of dicts """
然而,当我在lambda密钥中使用[' raiting']时,我说
Traceback (most recent call last):
File "/Users/Aleshka/Desktop/teszz.py", line 22, in <module>
print sorted(gmapz['results'],key = lambda x : x['rating'],reverse=True)
File "/Users/Aleshka/Desktop/teszz.py", line 22, in <lambda>
print sorted(gmapz['results'],key = lambda x : x['rating'],reverse=True)
KeyError: 'rating'
这意味着此密钥不存在。 起初我认为这可能是谷歌输出unicode格式的原因,但是
>>> u'abc' == 'abc'
True
我也很困惑,因为在几天前我能够在纽约(确切地说是曼哈顿)的位置做到这一点,但是当我在不同的地方做了很少的测试并且选择了莫斯科时,俄罗斯就破了。不知道出了什么问题。 我认为这可能会发生,因为我达到了查询限制,但事实并非如此。
答案 0 :(得分:0)
任何一个结果都可能没有关键字&#39;等等。 尝试通过打印没有密钥&#39;评级的结果来调试它。
for res in gmapz['results']:
if 'rating' not in res.keys():
print res
现在您知道哪些结果没有任何评级。
答案 1 :(得分:0)
在@ Shra1的帮助下,我用
修复了问题print sorted(gmapz['results'], key = lambda x: ('rating' not in x, `x.get('rating',None)),reverse = True)`
显示没有评级的第一项,其余按降序排序。