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

如何将字典列表转换为嵌套字典(一行实现/无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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:27:17