在 python 中解析嵌套列表和字典

Parse a nested List lists and Dicts in python

我正在使用 google 地图 api python 客户端获取地理编码数据。 api returns 一个看起来是列表和字典列表的列表。这是一个结果的示例。

[[{'address_components': [{'long_name': 'Liverpool',
 'short_name': 'Liverpool',
 'types': ['locality', 'political']},
{'long_name': 'Merseyside',
 'short_name': 'Merseyside',
 'types': ['administrative_area_level_2', 'political']},
{'long_name': 'England',
 'short_name': 'England',
 'types': ['administrative_area_level_1', 'political']},
{'long_name': 'United Kingdom',
 'short_name': 'GB',
 'types': ['country', 'political']}]

它持续了一段时间,然后一个新列表从 address_components 开始往下一点。每个结果中间是'location':{'lat':xxx, 'lng':xxx},

'location': {'lat': 53.4083714, 'lng': -2.9915726},
'location_type': 'APPROXIMATE',
'viewport': {'northeast': {'lat': 53.503907, 'lng': -2.8129382},
 'southwest': {'lat': 53.3204478, 'lng': -3.0191793}}}

我正在尝试获取 'lat'lng 的值。

我试过用几种方法来解析它。例如:

example = [[{'address_components': [{'long_name': 'Liverpool',
 'short_name': 'Liverpool',
 'types': ['locality', 'political']},
{'long_name': 'Merseyside',
 'short_name': 'Merseyside',
 'types': ['administrative_area_level_2', 'political']},
{'long_name': 'England',
 'short_name': 'England',
 'types': ['administrative_area_level_1', 'political']},
{'long_name': 'United Kingdom',
 'short_name': 'GB',
 'types': ['country', 'political']}]

我试过这样解析:

for x in example[i]: for t in x: print(t)

这个returns:

address_components
formatted_address
geometry
place_id
types

现在,我的 latlng 在那个 geometry 中,像这样:

'geometry': {'bounds': {'northeast': {'lat': 53.503907, 'lng': -2.8129382},
 'southwest': {'lat': 53.3204478, 'lng': -3.0191793}}

但是如果我尝试将 for 循环扩展为如下所示:

for x in source_ll[i]: for t in x: for z in t: print(z)

它输出: a d d r e s s _ c o m p o n e n t s f o r m a 等等。这些只是构成从 for t in x.

返回的内容的字符串

更新 我试过了:

for x in example[i]: for t in x: for value in ['geometry']: print(value)

但是这个returns geometryn次。

我只想得到53.4083714-2.9915726

我意识到我需要你的帮助!!

当您执行 for c in some_string: print(c) 时,您只需一次打印 some_string 个字符,每个字符各占一行。相反,您需要类似以下内容,其中几何条目的处理基于您上面的示例。

        if t == 'geometry':
            bnd = t['bounds']
            ne = bnd['northeast']
            sw = bnd['southwest']
            [print('ne', ne['lat'], ne['lng'], 'sw', sw['lat'], sw['lng']

#for key1, value1 in target_query.items(): 尝试: 对于 value1 中的实体: 如果是实例(实体,字典): 对于 entities.items() 中的 key2、value2: 如果是实例(值 2,字典): 对于 value2.items() 中的 key3、value3: 如果是实例(值 3,字典): 对于 key4,value4 在 value3.items():<br> 如果 isinstance(value4, dict):<br> x = value4.get('lat') x = 海峡(x) y = value4.get('lng') y = str(y)