python - 访问字典列表中的值
问题描述
Python 新手,使用 Kaggle 的 LA Parking Citation 数据库进行练习。
我从 GoogleMaps API 检索数据,现在我正在努力解析它。一些背景知识,我有一个数据框中的地址列表,我通过 API 将它们放入,并将结果放入一个名为 geocode_result 的变量中。从该变量中,我想访问相应的邮政编码,将其转换为列表格式,然后附加我的数据框以进行进一步分析。
我想在字典 geocode_result 列表中创建所有邮政编码的列表。现在, zipcodes 正在返回一个空列表。
list_component = geocode_result[0][0]['geometry']['location']['address_components']
zipcodes = []
def geocode_results_process(list_component):
for dct in list_component:
if 'postal_code' in dct['types']:
zipcode = dct['short_name']
zipcodes.append(zipcode)
# - this returns a null list
下面我漂亮地打印出了 geocode_result 的第一个元素。我想要的元素是类型'postal_code'>'short_name'>'90057'。
pprint(geocode_result[0])
[{'address_components': [{'long_name': 'Los Angeles',
'short_name': 'Los Angeles',
'types': ['locality', 'political']},
{'long_name': 'Los Angeles County',
'short_name': 'Los Angeles County',
'types': ['administrative_area_level_2',
'political']},
{'long_name': 'California',
'short_name': 'CA',
'types': ['administrative_area_level_1',
'political']},
{'long_name': 'United States',
'short_name': 'US',
'types': ['country', 'political']}],
'formatted_address': 'Los Angeles, CA, USA',
'geometry': {'bounds': {'northeast': {'lat': 34.3373061, 'lng': -118.1552891},
'southwest': {'lat': 33.7036519,
'lng': -118.6681759}},
'location': {'address_components': [{'long_name': '721',
'short_name': '721',
'types': ['street_number']},
{'long_name': 'South '
'Westlake '
'Avenue',
'short_name': 'S Westlake '
'Ave',
'types': ['route']},
{'long_name': 'Westlake',
'short_name': 'Westlake',
'types': ['neighborhood',
'political']},
{'long_name': 'Los Angeles',
'short_name': 'Los Angeles',
'types': ['locality',
'political']},
{'long_name': 'Los Angeles '
'County',
'short_name': 'Los Angeles '
'County',
'types': ['administrative_area_level_2',
'political']},
{'long_name': 'California',
'short_name': 'CA',
'types': ['administrative_area_level_1',
'political']},
{'long_name': 'United '
'States',
'short_name': 'US',
'types': ['country',
'political']},
{'long_name': '90057',
'short_name': '90057',
'types': ['postal_code']}],
'formatted_address': '721 S Westlake Ave, Los '
'Angeles, CA 90057, USA',
'geometry': {'bounds': {'northeast': {'lat': 34.0555963,
'lng': -118.2761535},
'southwest': {'lat': 34.0553198,
'lng': -118.2766184}},
'location': {'lat': 34.0554475,
'lng': -118.2763928},
'location_type': 'ROOFTOP',
'viewport': {'northeast': {'lat': 34.05680703029149,
'lng': -118.2750369697085},
'southwest': {'lat': 34.0541090697085,
'lng': -118.2777349302915}}},
'place_id': 'ChIJHbSDWZ_HwoARj7BGtBrQq94',
'types': ['premise']},
'location_type': 'APPROXIMATE',
'viewport': {'northeast': {'lat': 34.3373061,
'lng': -118.1552891},
'southwest': {'lat': 33.7036519,
'lng': -118.6681759}}},
'place_id': 'ChIJE9on3F3HwoAR9AhGJW_fL-I',
'types': ['locality', 'political']}]
这是我细分的内容:
pprint(geocode_result[0][0]['geometry']['location']['address_components])
[{'long_name': '721', 'short_name': '721', 'types': ['street_number']},
{'long_name': 'South Westlake Avenue',
'short_name': 'S Westlake Ave',
'types': ['route']},
{'long_name': 'Westlake',
'short_name': 'Westlake',
'types': ['neighborhood', 'political']},
{'long_name': 'Los Angeles',
'short_name': 'Los Angeles',
'types': ['locality', 'political']},
{'long_name': 'Los Angeles County',
'short_name': 'Los Angeles County',
'types': ['administrative_area_level_2', 'political']},
{'long_name': 'California',
'short_name': 'CA',
'types': ['administrative_area_level_1', 'political']},
{'long_name': 'United States',
'short_name': 'US',
'types': ['country', 'political']},
{'long_name': '90057', 'short_name': '90057', 'types': ['postal_code']}]
我想以编程方式循环遍历我的变量 geocode_results 以创建邮政编码列表。
解决方案
你的代码对我来说很好用
geocode_result = [[{'address_components': [{'long_name': 'Los Angeles',
'short_name': 'Los Angeles',
'types': ['locality', 'political']},
{'long_name': 'Los Angeles County',
'short_name': 'Los Angeles County',
'types': ['administrative_area_level_2',
'political']},
{'long_name': 'California',
'short_name': 'CA',
'types': ['administrative_area_level_1',
'political']},
{'long_name': 'United States',
'short_name': 'US',
'types': ['country', 'political']}],
'formatted_address': 'Los Angeles, CA, USA',
'geometry': {'bounds': {'northeast': {'lat': 34.3373061, 'lng': -118.1552891},
'southwest': {'lat': 33.7036519,
'lng': -118.6681759}},
'location': {'address_components': [{'long_name': '721',
'short_name': '721',
'types': ['street_number']},
{'long_name': 'South '
'Westlake '
'Avenue',
'short_name': 'S Westlake '
'Ave',
'types': ['route']},
{'long_name': 'Westlake',
'short_name': 'Westlake',
'types': ['neighborhood',
'political']},
{'long_name': 'Los Angeles',
'short_name': 'Los Angeles',
'types': ['locality',
'political']},
{'long_name': 'Los Angeles '
'County',
'short_name': 'Los Angeles '
'County',
'types': ['administrative_area_level_2',
'political']},
{'long_name': 'California',
'short_name': 'CA',
'types': ['administrative_area_level_1',
'political']},
{'long_name': 'United '
'States',
'short_name': 'US',
'types': ['country',
'political']},
{'long_name': '90057',
'short_name': '90057',
'types': ['postal_code']}],
'formatted_address': '721 S Westlake Ave, Los '
'Angeles, CA 90057, USA',
'geometry': {'bounds': {'northeast': {'lat': 34.0555963,
'lng': -118.2761535},
'southwest': {'lat': 34.0553198,
'lng': -118.2766184}},
'location': {'lat': 34.0554475,
'lng': -118.2763928},
'location_type': 'ROOFTOP',
'viewport': {'northeast': {'lat': 34.05680703029149,
'lng': -118.2750369697085},
'southwest': {'lat': 34.0541090697085,
'lng': -118.2777349302915}}},
'place_id': 'ChIJHbSDWZ_HwoARj7BGtBrQq94',
'types': ['premise']},
'location_type': 'APPROXIMATE',
'viewport': {'northeast': {'lat': 34.3373061,
'lng': -118.1552891},
'southwest': {'lat': 33.7036519,
'lng': -118.6681759}}},
'place_id': 'ChIJE9on3F3HwoAR9AhGJW_fL-I',
'types': ['locality', 'political']}]]
list_component = geocode_result[0][0]['geometry']['location']['address_components']
zipcodes = []
def geocode_results_process(list_component):
for dct in list_component:
if 'postal_code' in dct['types']:
zipcode = dct['short_name']
zipcodes.append(zipcode)
geocode_results_process(list_component)
print(zipcodes)
>>> ['90057']
根据您发布的代码,我怀疑您没有调用您创建的函数?
更新:遍历 geocode_result
for el in geocode_result:
for sub_el in el:
geocode_results_process(sub_el['geometry']['location']['address_components'])
推荐阅读
- matlab - Matlab自定义均方对数误差回归层
- java - RecyclerView 不显示数据
- python - Django throwing ValueError: too many values to unpack (expected 2) without change to the code
- c# - Web api控制器中的注入不使用单实例
- android - Android Activity::onCreate 在 Application.onCreate 之前调用
- excel - 使用 for 循环来识别行
- angularjs - 加载一个简单的 angularjs jsfiddle
- ssl - 如何使用 SSL 在 Kubernetes 中配置 Flask ws?
- java - 我想自动旋转另存为原始文件
- xquery - 如何在 if-then 语句中包含多个函数调用或赋值