如何将字典列表转换为嵌套字典(一行实现/无for循环)
一行代码实现字典列表转嵌套字典(无显式for循环块)
原始输入
l = [{'u': 1, 'v': 2, 'k': [1, 1, 1, 1, 1]}, {'u': 1, 'v': 3, 'k': [2, 2, 2, 2, 2]}, {'u': 2, 'v': 3, 'k': [3, 3, 3, 3, 3]}, {'u': 1, 'v': 4, 'k': [4, 4, 4, 4, 4]}, {'u': 2, 'v': 5, 'k': [5, 5, 5, 5, 5]}]
目标输出格式
nested_d = { '1': {'2': [1, 1, 1, 1, 1], '3': [2, 2, 2, 2, 2], '4': [4, 4, 4, 4, 4]}, '2': {'3': [3, 3, 3, 3, 3], '5': [5, 5, 5, 5, 5]} }
实现方案
常规一行写法(可读性优先)
先导入依赖模块,核心转换逻辑为一行嵌套字典推导:
from itertools import groupby from operator import itemgetter nested_d = {str(u): {str(d['v']): d['k'] for d in group} for u, group in groupby(sorted(l, key=itemgetter('u')), key=itemgetter('u'))}
单整行写法(无需提前导入)
如果要彻底写成一行(牺牲部分可读性):
nested_d = {str(u): {str(d['v']): d['k'] for d in group} for u, group in __import__('itertools').groupby(sorted(l, key=__import__('operator').itemgetter('u')), key=__import__('operator').itemgetter('u'))}
逻辑说明
- 先用
sorted结合itemgetter('u')对列表按u字段排序,确保groupby能正确将同u值的字典归为一组(groupby仅对连续相同键的元素分组) - 借助
groupby按u完成分组,得到(u值, 对应字典组)的迭代对 - 通过嵌套字典推导,将
u和v转为字符串作为层级键,k列表作为最终值,直接生成目标嵌套字典
内容的提问来源于stack exchange,提问作者HJA24
相关产品推荐
相关产品推荐

