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

如何通过可变数量的键遍历字典,构建URL树形结构?

把URL列表转换为树形字典的最优实现

我来帮你搞定这个URL转树形字典的问题~你之前用字符串跟踪字典路径的思路容易卡壳,其实用字典引用来动态跟踪当前层级会更简单高效,而且能处理任意深度的URL。

核心思路

不用费劲拼接字符串路径,而是维护一个指向当前字典层级的指针:

  • 先从根字典开始,每个URL解析出域名和路径段
  • 遍历路径的每一段,检查当前层级字典里有没有这个键:
    • 如果没有,就创建一个新的空字典作为值
    • 把指针移到这个子字典
  • 最后把路径的最后一段设为None(对应你要的叶子节点)

完整Python实现

from urllib.parse import urlparse

list_of_links = [
    'http://example.com/one/two/three/four/',
    'http://example.com/one/two/three/five/',
    'http://example.com/one/two/three/five/six',
    'http://example.com/one/two/five',
]

# 初始化根字典,域名作为根键
tree = {}

for link in list_of_links:
    parsed = urlparse(link)
    # 提取域名(比如example.com)
    domain = parsed.netloc
    # 分割路径,过滤掉空字符串(处理开头/和结尾/的情况)
    path_segments = [seg for seg in parsed.path.split('/') if seg]
    
    # 从根字典开始,先确保域名存在
    if domain not in tree:
        tree[domain] = {}
    current_dict = tree[domain]
    
    # 遍历路径段,构建层级
    for i, segment in enumerate(path_segments):
        # 如果是最后一个段,设为None;否则确保是字典
        if i == len(path_segments) - 1:
            current_dict[segment] = None
        else:
            if segment not in current_dict:
                current_dict[segment] = {}
            current_dict = current_dict[segment]

# 打印结果看看
import json
print(json.dumps(tree, indent=4))

代码解释

  1. URL解析:用urlparse拆分出域名(netloc)和路径(path),避免手动处理HTTP/HTTPS前缀。
  2. 路径清洗:用列表推导式过滤掉split('/')产生的空字符串(比如/one/two/分割后会有['', 'one', 'two', ''],过滤后得到['one', 'two'])。
  3. 层级遍历:
    • 先确保域名在根字典中,然后把current_dict指向域名对应的子字典
    • 遍历每个路径段:如果是最后一段,直接设为None(叶子节点);如果不是,就创建子字典并移动指针到下一层级
  4. 结果验证:用json.dumps格式化输出,和你想要的树形结构完全一致。

为什么比你的伪代码更优

  • 避免了字符串拼接路径的麻烦,不用动态拼接键路径去访问字典(比如dic['one']['two']这种嵌套访问用字符串很难实现)
  • 用字典引用直接操作当前层级,时间复杂度是O(n)(n是所有URL的路径段总数),效率很高
  • 天然支持任意深度的URL,不管路径有多少层都能处理

运行这段代码后,你会得到和你要求完全一样的树形字典:

{
    "example.com": {
        "one": {
            "two": {
                "three": {
                    "four": null,
                    "five": {
                        "six": null
                    }
                },
                "five": null
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者UnderpoweredNinja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:08:38