如何用列表推导式筛选嵌套Python字典列表中含‘question’的网页链接
用列表推导式筛选含"question"的链接当然可以!
当然能用列表推导式搞定这个需求,这可是Python里处理这类简单筛选最清爽的写法之一~
情况1:已经用递归提取了所有链接
假设你已经通过递归函数把所有网页链接都捞到了一个叫all_links的列表里,那筛选只需要一行代码:
# 不区分大小写匹配"question" filtered_links = [link for link in all_links if "question" in link.lower()] # 如果要严格匹配小写的"question",去掉.lower()就行 # filtered_links = [link for link in all_links if "question" in link]
解释下:加.lower()是为了避免因为大小写错过匹配,比如遇到"https://example.com/Question123"这种也能筛出来,按需调整就行。
情况2:想把递归提取+筛选一步完成
要是你觉得先存所有链接再筛选有点浪费内存(尤其是数据量大的时候),可以把递归提取和筛选整合到一起,用递归生成器+列表推导式的组合:
首先写一个递归生成器来遍历嵌套结构,把链接都揪出来:
def extract_links(nested_data): # 遍历字典的所有值 if isinstance(nested_data, dict): for val in nested_data.values(): yield from extract_links(val) # 遍历列表的所有元素 elif isinstance(nested_data, list): for item in nested_data: yield from extract_links(item) # 判断是不是网页链接(这里假设链接以http/https开头) elif isinstance(nested_data, str) and nested_data.startswith(("http://", "https://")): yield nested_data
然后直接用列表推导式筛选:
# 把你的JSON数据传进去就行,比如你给的截断版数据 filtered_links = [link for link in extract_links(your_json_data) if "question" in link.lower()]
这样边提取边筛选,不用先存一堆无关链接,效率更高~
内容的提问来源于stack exchange,提问作者Kaleab Woldemariam
相关产品推荐
相关产品推荐

