在嵌套字典中搜索值



我想在下面的字典列表中搜索一个特定的键值对。在本例中为administrative_area_level_1,并从该字典中获取short_name键的值。

列表的内容变化,因此我不能简单地用索引访问它,例如,我不能做s[0]['address_components'][4]这样的事情。

下面是一个字典的示例列表:

[{'address_components': [{'long_name': '5555',
'short_name': '5555',
'types': ['street_number']},
{'long_name': 'East 14th Street',
'short_name': 'E 14th St',
'types': ['route']},
{'long_name': 'Tucson',
'short_name': 'Tucson',
'types': ['locality', 'political']},
{'long_name': 'Pima County',
'short_name': 'Pima County',
'types': ['administrative_area_level_2', 'political']},
{'long_name': 'Arizona',
'short_name': 'AZ',
'types': ['administrative_area_level_1', 'political']},
{'long_name': 'United States',
'short_name': 'US',
'types': ['country', 'political']},
{'long_name': '85711', 'short_name': '85711', 'types': ['postal_code']}],
'formatted_address': '5555 E 14th St, Tucson, AZ 85711, USA',
'geometry': {'bounds': {'northeast': {'lat': 32.2180021,
'lng': -110.8732351},
'southwest': {'lat': 32.2169439, 'lng': -110.8750912}},
'location': {'lat': 32.2175302, 'lng': -110.874105},
'location_type': 'GEOMETRIC_CENTER',
'viewport': {'northeast': {'lat': 32.2188219802915,
'lng': -110.8728141697085},
'southwest': {'lat': 32.2161240197085, 'lng': -110.8755121302915}}},
'place_id': 'ChIJM8Ct8ZVv1oYRG5lGDi',
'types': ['premise']}]

如何得到以下预期输出?

'AZ'

您可以使用.get().filter()来忽略没有types键并且在types列表中没有目标字符串的任何字典。从这里,您可以直接访问short_name键:

下面的代码片段查找满足上述属性的所有字典的所有short_name:

target = 'administrative_area_level_1'
retained_items = list(filter(lambda x: target in x.get('types', []),
data[0]['address_components']))
for item in retained_items:
print(item['short_name'])

这个输出:

AZ

这样就可以实现,其中data是给定的字典列表。

target_key = 'administrative_area_level_1'
target_value_of = 'short_name'
for i in data:
if(i['address_components']):
for d in i['address_components']:
if(target_key in d['types']):
print(d[target_value_of])

相关内容

  • 没有找到相关文章

最新更新