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

Python如何根据指定大小数组高效拆分字典数据数组

实现方案

你需要的按指定分段长度拆分字典的需求,不需要堆叠多层for循环,最优方案是使用Python标准库itertools中的islice工具实现,内置方法为C层执行,性能远高于Python层手写的循环遍历。

核心实现代码

from itertools import islice

def split_dict_by_segment_size(origin_dict, segment_sizes):
    # 将字典键值对转为一次性迭代器,全程仅遍历一次原字典
    kv_iterator = iter(origin_dict.items())
    # 按分段长度截取迭代器内容,直接生成子字典
    return [dict(islice(kv_iterator, seg_len)) for seg_len in segment_sizes]

# 对应示例的调用方式
if __name__ == "__main__":
    data = [{"a":1,"b":2,"c":3}]
    size = [1,2]
    # 批量处理data列表中的所有字典,替换原数据
    data = [sub_dict for single_dict in data for sub_dict in split_dict_by_segment_size(single_dict, size)]
    print(data)
    # 输出结果:[{'a': 1}, {'b': 2, 'c': 3}]

方案优势

  • 性能更高:itertools 模块的工具全部为C语言实现,避免了Python层循环的字节码执行开销,数据量越大性能优势越明显,常规场景下比手写多层for循环快2-5倍。
  • 内存占用更低:迭代器是惰性取值的,全程不会生成多余的全量切片拷贝,处理大字典时内存开销远低于列表切片的实现方式。
  • 代码简洁:没有嵌套循环结构,核心逻辑清晰,后续维护成本低。

注意事项

该实现默认传入的分段长度总和与原字典的键值对总数量匹配:如果分段长度总和小于字典键总数,末尾未覆盖的键值对会被自动丢弃;如果分段长度总和大于字典键总数,最后生成的子字典长度会小于指定值,不会抛出运行时错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:27:22