我有多层次的字典列表,我需要从中列出两个必要的列表。目前我可以这样做,但我想做一个完整的列表理解方式
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)
正如g.d.d.c所提到的,列表理解并不总是有利的。在这种情况下,它将具有更好的性能,因为您将避免在每次迭代中调用
append
,如this answer所述。如果你充分利用缩进,你仍然可以很容易地理解列表唯一的问题是,不能从列表理解返回两个不同的列表,最接近的方法是返回带有
(poi, nh)
对的单个列表,其中poi
和nh
是列表另一个在你的问题中不清楚的考虑是,你是否想
append
或extend
每个列表不管怎样,这是一份清单。您可以首先看出它基本上是最内部的代码,然后依次是所有的
for
和if
我会考虑从这里开始哪一个最简单,或者使用
main_list
原样并修改进一步的代码,或者将元组分为两个列表如果必须将
poi
和nh
作为两个单独的列表,那么现在需要两个列表理解我同意g.d.d.c.的评论。非常需要代码可读性
另一方面,看起来您正在使用建议的方法覆盖
poi
和nh
at我猜这会给你一个更想要的方法:
通过使用“扩展”,可以将所有值添加到原始列表中,而不是覆盖整个列表
相关问题 更多 >
编程相关推荐