python - Python将嵌套循环转换为列表理解
问题描述
我有多级字典列表,我需要从中创建两个必需的列表。目前我可以这样做,但想以完全列表理解的方式,
poi = []
nh = []
tr_poi_nh = response.xpath('string(//body)').re(r'window\.__WEB_CONTEXT__=(.*?);\(this')[0]
tr_poi_nh = json.loads(tr_poi_nh.replace("pageManifest", '"pageManifest"'))
for entry in tr_poi_nh['pageManifest']['hydrations']:
if entry['package'] == 'e374ol':
for value in entry['props']['initialAvailableFilters']:
if value['paramName'] =='distFrom':
poi = [x['normalized_name'] for x in value['poiSet']]
if value['paramName'] == 'zfn':
nh = [y['label'] for y in value['choices']]
print(poi,nh)
解决方案
我同意 gddc 的评论。代码可读性是非常需要的。
另一方面,您似乎正在使用建议的方法来压倒poi
一切nh
。
我猜这会给你一个更想要的方法:
poi = []
nh = []
tr_poi_nh = response.xpath('string(//body)').re(r'window\.__WEB_CONTEXT__=(.*?);\(this')[0]
tr_poi_nh = json.loads(tr_poi_nh.replace("pageManifest", '"pageManifest"'))
for entry in tr_poi_nh['pageManifest']['hydrations']:
if entry['package'] == 'e374ol':
for value in entry['props']['initialAvailableFilters']:
if value['paramName'] =='distFrom':
poi.extend([x['normalized_name'] for x in value['poiSet']])
if value['paramName'] == 'zfn':
nh.extend([y['label'] for y in value['choices']])
print(poi,nh)
通过使用扩展,您会将所有值添加到原始列表中,而不是覆盖整个列表。
推荐阅读
- excel - 关于通过VBA导入google sheet到excel的问题
- android - genymotion + virtualbox错误
- python-3.x - Networkx - 使用边缘标签、高度和宽度属性、自定义图像导出 graphml
- r - 如何使用 sub 在 R 中提取带有首字母的名称?
- angular - Angular 5 静态注入错误
- amazon-web-services - 如何在 request_spot_instances 中附加 VPC 和子网?
- python - Python——如何成功地从一个对象复制数据并更改一个变量而不更改另一个变量?
- templates - c++0x中模板参数的编译时边界
- colors - JavaFX 8 中的 Color.VALUE 到文本
- asp.net - Asp.net 核心引导选项卡问题