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
相关产品推荐
相关产品推荐

