我一直在努力解决这个问题以及从Google Maps API中逐步完成此输出所需的逻辑。
基本上我正在使用谷歌地图Distance_Matrix: 以下是API调用两个地址之间距离/时间的返回信息示例,我已为此示例分配了变量 distanceMatrixReturn 。
distanceMatrixReturn = {
{'destination_addresses': ['This would be ADDRESS 1'],
'status': 'OK',
'rows': [
{
'elements': [
{
'duration_in_traffic': {
'text': '10 mins', 'value': 619},
'status': 'OK',
'distance': {'text': '2.8 mi', 'value': 4563},
'duration': {'text': '9 mins', 'value': 540}}]}],
}]
}],
'origin_addresses': ['This would be ADDRESS 2']
}
现在,成为一个挣扎于嵌套词典和列表的蟒蛇新手; 这是我的思考过程:
我想要访问我的印象所在的值'2.8 mi'
,该字词位于与“text”键相关联的字典中,而该字典又位于分配给键'distance'
的字典中,这是在另一个密钥为'duration_in_traffic'
的字典中。
密钥'duration_in_traffic'
似乎位于列表中,与字典密钥'elements'
绑定,后者又位于与另一个字典密钥'rows'
绑定的列表中。
现在,这看起来非常复杂,必须有一种简单的方法来处理这种情况,或者我的逻辑可能只是关于嵌套元素中的嵌套以及访问它们的方法。
例如,在这里的其他帖子中,我已经阅读了以下内容,试图找出解释看似相似的东西的过程。 How to access a dictionary key value present inside a list?
如果我在这篇文章中对distanceMatrixReturn进行了很好的构建,请告诉我。我把它隔开试图让它更具可读性,我希望我已经实现了它。
答案 0 :(得分:1)
你的字典坏了,所以很难想象正确的道路。反正。
from operator import getitem
path = ["rows", 0, "elements", 0, "duration_in_traffic", "distance", "text"]
reduce(getitem, path, distanceMatrixReturn) # -> "2.8 mi"
在Python 3上,您必须先从reduce
导入functools
。
答案 1 :(得分:0)
虽然丑陋,但它很简单:
distanceMatrixReturn['rows'][0]['elements'][0]['duration_in_traffic']['distance']['text']
除非你想创建namedtuple
或类,否则实际上没有任何更清洁的方法,但实际上你还是要解析出来数据的方式相同 - 您只需在程序的不同部分进行分析即可。
至于哪个选项最好 - 程序的需求将决定这一点。
答案 2 :(得分:0)
如果您尝试从2.8 mi
访问distanceMatrixReturn
,则可以执行此操作:
distanceMatrixReturn['rows'][0]['elements'][0]['duration_in_traffic']['distance']['text']