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

时间:2018-11-04 13:55:54

标签: python-3.x dictionary nested-lists

我正在使用google maps api python客户端来获取地理编码数据。 api返回一个列表,该列表似乎是列表和字典的列表。这是一个结果的示例。

[[{'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)

这将返回:

address_components
formatted_address
geometry
place_id
types

现在,我的latlnggeometry中,就像这样:

'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)

但这又回来了 geometry n次。

我只想获取53.4083714-2.9915726

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

2 个答案:

答案 0 :(得分:1)

执行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']

答案 1 :(得分:0)

#for key1, value1 in target_query.items(): try: for entities in value1: if isinstance(entities, dict): for key2, value2 in entities.items(): if isinstance(value2, dict): for key3, value3 in value2.items(): if isinstance(value3, dict): for key4, value4 in value3.items():
if isinstance(value4, dict):
x = value4.get('lat') x = str(x) y = value4.get('lng') y = str(y)