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

如何使用Python3单行代码重构指定结构的嵌套字典?

实现目标字典结构转换的简洁Python3代码

当然可以用简洁的单行或近单行代码实现,这里提供几种实用方案:

无依赖单行实现

无需导入任何模块,利用字典的setdefault方法配合列表推导式完成:

out_dict = {}; [out_dict.setdefault(k[0], []).append({k[1]: v}) for k, v in in_dict.items()]

setdefault会自动为不存在的ID键创建空列表,随后我们将每个{TEXT: TIMESTAMP}形式的字典追加到对应列表中。虽然列表推导式会生成一个由None组成的临时列表,但这个结果可以直接忽略,核心逻辑已经完成字典的构建。如果需要严格的单行(不使用分号),可以用嵌套lambda:

out_dict = (lambda d: [d.setdefault(k[0], []).append({k[1]: v}) for k, v in in_dict.items()] or d)({})

借助collections.defaultdict的实现

如果想避免临时列表的生成,用defaultdict会更直观:

from collections import defaultdict
out_dict = defaultdict(list); [out_dict[k[0]].append({k[1]: v}) for k, v in in_dict.items()]
# 若需转为普通字典而非defaultdict,执行:
# out_dict = dict(out_dict)

基于分组的实现(itertools.groupby)

通过分组操作实现逻辑更清晰的转换,需先按ID排序以保证同ID项连续:

from itertools import groupby
from operator import itemgetter
out_dict = {id_: [{text: ts} for (_, text), ts in group] for id_, group in groupby(sorted(in_dict.items(), key=itemgetter(0)), key=lambda x: x[0][0])}

这些方案都比常规for循环更简洁,其中无依赖的单行实现是最轻量化的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:20:41