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

Python中如何从列表元素构建指定结构的层级字典

问题描述

给定一个混合类型的列表,其中字符串元素为数据库名,后续到下一个数据库名前的列表元素是[存储大小, 用户名]格式的子列表。需要构建如下结构的嵌套字典:

{
    "db_name1": {
        "user1": ["132K", "4.0M", ...],
        "user2": ["40K", ...]
    },
    "db_name2": {
        "user3": ["132K", ...],
        "user4": ["3.6M", "48K", ...]
    }
}

已知数据库名在主列表中的索引列表:

dbs_indexes = [0, 5, 23, 1360, 1364, 4124, 4680, 5294, 13212, 13219]

询问是否可以利用该索引列表实现上述需求。

解决方案

完全可以利用dbs_indexes高效实现需求,核心思路是通过索引分割每个数据库对应的用户数据区间,再遍历区间内的子列表整理用户的存储大小。

实现步骤

  • 遍历dbs_indexes中的每一对相邻索引,确定当前数据库的用户数据范围:
    • 当前数据库名的索引为idx,下一个数据库名的索引为next_idx,则当前数据库的用户数据区间是main_list[idx+1 : next_idx]
    • 最后一个数据库的区间为main_list[idx+1 : ]
  • 对每个数据库的用户数据区间,遍历子列表,将存储大小按用户名归类到子字典中。

代码示例

假设主列表名为main_list,具体实现代码如下:

main_list = ['db_name1', ['132K', 'user1'], ['8.0K', 'user1'], ['16K', 'user2'], 'db_name2', ['132K', 'user3'], ['292K', 'user3'], ['16K', 'user4'], ['132K', 'user4'], 'db_name3', ['132K', 'user5'], ['12K', 'user5'], ['16K', 'user6']]
dbs_indexes = [0, 5, 9]  # 对应示例main_list的索引

result = {}

# 遍历每个数据库的索引
for i in range(len(dbs_indexes)):
    db_idx = dbs_indexes[i]
    db_name = main_list[db_idx]
    # 确定当前数据库用户数据的结束索引
    end_idx = dbs_indexes[i+1] if i < len(dbs_indexes)-1 else len(main_list)
    # 初始化当前数据库的用户存储字典
    user_storage = {}
    # 遍历当前数据库的所有用户数据
    for size, user in main_list[db_idx+1 : end_idx]:
        user_storage.setdefault(user, []).append(size)
    # 将子字典加入结果
    result[db_name] = user_storage

print(result)

输出结果

运行代码后得到的字典结构如下:

{
    'db_name1': {'user1': ['132K', '8.0K'], 'user2': ['16K']},
    'db_name2': {'user3': ['132K', '292K'], 'user4': ['16K', '132K']},
    'db_name3': {'user5': ['132K', '12K'], 'user6': ['16K']}
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:15:33