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

如何迭代元组列表生成嵌套字典并添加对应子键

Python实现元组列表转规则嵌套字典

原始输入数据

x = [('0', '0', '20'), ('0', '0', '25'), ('0', '3', '28'), ('1', '1', '74'), ('1', '1', '2')]

解法1:基础字典实现(无需导入第三方包)

res = {}
for top_key, sub_key, value in x:
    # 初始化顶级键对应的空字典
    if top_key not in res:
        res[top_key] = {}
    # 处理子键值
    if sub_key not in res[top_key]:
        res[top_key][sub_key] = value
    else:
        # 已存在值则合并为元组
        if type(res[top_key][sub_key]) == str:
            res[top_key][sub_key] = (res[top_key][sub_key], value)
        else:
            res[top_key][sub_key] += (value,)

print(res)

输出结果和要求完全一致:{'0': {'0': ('20', '25'), '3': '28'}, '1': {'1': ('74', '2')}}

注:示例中'3': ('28')实际等价于字符串'28',如果需要单元素元组格式('28',),可以把子键初始化的逻辑改成res[top_key][sub_key] = (value,),后续追加直接用+= (value,)即可。

解法2:使用collections.defaultdict简化写法

from collections import defaultdict

# 用临时嵌套字典收集所有值到列表
temp_dict = defaultdict(lambda: defaultdict(list))
for top_key, sub_key, value in x:
    temp_dict[top_key][sub_key].append(value)

# 转换为符合要求的输出格式
res = {}
for top_k, sub_d in temp_dict.items():
    res[top_k] = {}
    for sub_k, val_list in sub_d.items():
        # 长度大于1转元组,否则直接取单个值
        res[top_k][sub_k] = tuple(val_list) if len(val_list) > 1 else val_list[0]

print(res)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:39:03