You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用列表推导式筛选嵌套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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:09:23