如何将Python字典的列表值按固定大小拆分为常量分块
字典按指定块大小拆分值列表实现
你可以直接通过遍历字典+列表切片的方式完成拆分,逻辑如下:
- 遍历原字典的每个键值对
- 若当前键对应的列表长度 ≤ 分块大小k,直接保留原键存入结果字典
- 若列表长度 >k,按步长k切片得到所有子列表,按顺序生成
原键_1、原键_2...格式的新键,将子列表对应存入结果字典
完整可运行代码
def split_dict_by_chunk_size(origin_dict, k): res = {} for key, items in origin_dict.items(): item_count = len(items) # 长度不超限直接保留原键 if item_count <= k: res[key] = items continue # 按步长k切片拆分 for i in range(0, item_count, k): chunk = items[i:i+k] new_key = f"{key}_{i//k + 1}" res[new_key] = chunk return res # 初始化原始数据 sports = ['soccer','basketball','tennis'] food = ['burger','fried rice', 'spaghetti','curry', 'lamb','wings'] movies = ['spider man', 'batman', 'iron man', 'hustle', 'desperado'] singers = ['drake'] goats = ['messi', 'jordan'] topics = {'sports':sports, 'food':food, 'movies':movies, 'singers':singers, 'goats':goats} # 测试k=2的拆分场景 result = split_dict_by_chunk_size(topics, k=2)
k=2时的运行结果
运行后得到的结果和你给出的预期输出(修正原示例里的语法笔误后)完全一致:
{ 'goats': ['messi', 'jordan'], 'sports_1': ['soccer', 'basketball'], 'sports_2': ['tennis'], 'food_1': ['burger', 'fried rice'], 'food_2': ['spaghetti', 'curry'], 'food_3': ['lamb', 'wings'], 'movies_1': ['spider man', 'batman'], 'movies_2': ['iron man', 'hustle'], 'movies_3': ['desperado'], 'singers': ['drake'] }
注:代码利用Python列表切片的容错特性,自动处理最后一块元素个数不足k的边界场景,不需要额外编写判断逻辑,传入任意正整数k都可正常完成拆分。
内容的提问来源于stack exchange,提问作者user872009
相关产品推荐
相关产品推荐

