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

如何对含列表、字典的嵌套数据结构递归取整小数?

递归处理嵌套数据结构中的小数取整

当然可以实现这种递归取整的方法,下面是适配Python 3.x的简洁实现,支持任意深度嵌套的列表、字典,同时兼容float和Decimal类型:

实现代码

from decimal import Decimal

def round_nested_data(data, decimals=0):
    # 处理字典:递归处理每个值
    if isinstance(data, dict):
        return {key: round_nested_data(value, decimals) for key, value in data.items()}
    # 处理列表:递归处理每个元素
    elif isinstance(data, list):
        return [round_nested_data(item, decimals) for item in data]
    # 处理小数类型:执行取整
    elif isinstance(data, (float, Decimal)):
        return round(data, decimals)
    # 其他类型直接返回
    else:
        return data

使用示例

测试嵌套数据:

test_data = {
    "pi": 3.1415926,
    "measurements": [1.618, 2.718, {"inner_value": 0.5772}],
    "financials": {"tax_rate": Decimal("0.0825"), "amounts": [100.45, 200.78]}
}

# 保留两位小数取整
result = round_nested_data(test_data, decimals=2)
print(result)

输出结果:

{
    "pi": 3.14,
    "measurements": [1.62, 2.72, {"inner_value": 0.58}],
    "financials": {"tax_rate": Decimal('0.08'), "amounts": [100.45, 200.78]}
}

对比旧方案的优势

你提到的旧方案多基于Python 2语法(比如使用dict.iteritems()),且大多只处理float类型,没有考虑Decimal这类高精度小数类型。上面的实现:

  • 采用Python 3的推导式语法,代码更简洁易读
  • 同时支持float和Decimal两种常见小数类型
  • 自动跳过非小数类型(如整数、字符串、布尔值),不修改原始结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:22:14