【发布时间】:2017-09-10 20:54:16
【问题描述】:
我在将 json 样式的 python 代码转换为字典时遇到问题。我正在使用从谷歌提取位置数据并获取我需要的所有数据。但是,每当我从数据列表创建字典时,都会丢失一些键:值对。
这是我返回的 json 样式的 python 代码。
{
'html_attributions': [],
'next_page_token': 'CpQCBgEAAFzW9_qpkvmXV8sFiwXg6dEp2jsZXEqQOO4upW1U0FZPK0kiJvSmEbx4EuhAtDD4vtJcC4duqCj6oo0P68cRkGArenzZQWr61Wne0vA44R16SrfCDWLxQjqUu8zUcdLvdB7HfOHPMd7-KWK4cmX-6bLYIJldmnJBeqhnR5xmtB_TGlMyGlzh4vZ4kOB8dc1bnD6ijWxfFyz8wJ1ugA_5hZHLXtCY6NkE8TVYgTTV9710puKlKgiVSSkjwV3IsGgEhzixzGRrVHg2dB3Ehv2KHRuXnvIQJHr-CIkUoK79vI-45pyitdYlW1h9UQk_fzDsIeec3PNE5Qz6kN--NcDv-_jzFBr7QS2RGLkAcZX4aFdfEhCoP3MAVgjsl_tKdYaIX8y_GhSvCFZSxLfWVDAyF--7T6l32G0YFw',
'results': [{
'formatted_address': '2222 McKinney Ave, Dallas, TX 75201, United States',
'geometry': {
'location': {
'lat': 32.7935,
'lng': -96.8021119
},
'viewport': {
'northeast': {
'lat': 32.7948813802915,
'lng': -96.8009040197085
},
'southwest': {
'lat': 32.7921834197085,
'lng': -96.8036019802915
}
}
},
'icon': 'https://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png',
'id': '26ba45975d09c8889ea321078b6bf10ceff07359',
'name': 'Smashburger',
'opening_hours': {
'open_now': True,
'weekday_text': []
},
'photos': [{
'height': 3024,
'html_attributions': ['<a href="https://maps.google.com/maps/contrib/107709113475800121508/photos">Terry Wint Jr</a>'],
'photo_reference': 'CmRaAAAA9BPb8sP5KUp9bLAgSd9dPQzH15TkG3sw5T6qOa-WSV1hi-3DLIhVzWI5woD2GtSl3aktKXTXktLUfr9vpum-XywbqFMKunee-YhWwPtwOGJaO5lULU-g1px7Z6lPUFvqEhDrofF3_89I455YRKo2hZuFGhRilVDqXdt5x2jPieN3W07UvJwsvA',
'width': 4032
}],
'place_id': 'ChIJ22Ci9y-ZToYRDw1hkXkjceY',
'price_level': 1,
'rating': 4.1,
'reference': 'CmRSAAAAzQIvy0nuhTQpRoAFTlilcVY_BfqGFj7gNlpNeIecwOWGV1x0qFm80zkPYFYKtJ15ilHYSoQbDH2wsQ_vahw5ilhriHA0EBWavcyev4mYVgNWssL0neY5d7YwOLAgtSEvEhBN6e_DakrfQPVtqkagEtQ4GhRCdi5cZ6CKfk6AqXkuGJ9ZVpuR-A',
'types': ['restaurant', 'food', 'point_of_interest', 'establishment']
}
正如在另一个 thread 中向我指出的那样,'price_level' 在 'results' 列表之外。然而,每当我调用'geocode_result.keys()',我只会得到'html_attributes', 'next_page_token', 'results', 'status'。
这是我正在运行的代码。
results = []
# def get_data():
for term, (latitude, longitude, search_radius) in search_parameters.items():
params = {
'query': term,
'location': (latitude, longitude),
'radius': search_radius
}
geocode_result = gmaps.places(**params)
for i in geocode_result['results']:
results.append(i['name'])
results.append(i['geometry']['location']['lat'])
results.append(i['geometry']['location']['lng'])
results.append(i['formatted_address'])
results.append(i['opening_hours']['open_now'])
results.append(i['price_level'])
results.append(i['rating'])
results.append(i['types'])
if 'next_page_token' in geocode_result.keys():
while 'next_page_token' in geocode_result.keys():
time.sleep(2.5)
params.update({'page_token': geocode_result['next_page_token']})
geocode_result = gmaps.places(**params)
for i in geocode_result['results']:
results.append(i['name'])
results.append(i['geometry']['location']['lat'])
results.append(i['geometry']['location']['lng'])
results.append(i['formatted_address'])
results.append(i['opening_hours']['open_now'])
results.append(i['price_level'])
results.append(i['rating'])
results.append(i['types'])
else:
break
print(results)
我希望能够拉出'lat', 'lng', 'name', 'open_now', 'price_level', 'rating', 'types'。我可以调用除最后三个之外的所有内容,因为它们没有作为键值对存储在'geocode_result' 中。任何帮助或建议表示赞赏!
【问题讨论】:
-
我无法重现这个,而且
geocode_result是一个列表,所以我不知道你是如何像字典一样迭代它的。 -
对不起,我不小心从以前的版本中复制了它,我现在将其编辑。
-
我仍然无法重现它。我回复
['Smashburger', 32.7935, -96.8021119, '2222 McKinney Ave, Dallas, TX 75201, United States', True, 1, 4.1, ['restaurant', 'food', 'point_of_interest', 'establishment']]这不是你想要的吗? -
你在运行时没有收到任何keyerrors吗?我能够运行它,但之后我不断收到键错误,因为
'price_level', 'rating', 'types'不是'geocode_result'或'geocode_result['results']'的键。 -
其实他们是关键,
['rating', 'reference', 'price_level', 'place_id', 'photos', 'formatted_address', 'id', 'types', 'icon', 'name', 'geometry', 'opening_hours']
标签: python json dictionary