如何将两个字典列表均匀分配至另外3个列表?求高效简易方案
嘿,这个需求我之前帮人解决过,给你两个简单高效的实现方案,按需选就行:
方案1:合并后按索引均匀分配(最简单直接)
这个方法先把两个字典列表合并成一个,再通过索引对3取模的方式分配到三个目标列表,能保证每个列表的元素数量尽可能接近(最多差1个),代码非常简洁。
示例代码:
# 你的两个字典列表(补全了示例数据) list_dicts_1 = [ {"name": "Suarez", "footed": "right-footed", "color": "black"}, {"name": "Suarez2", "footed": "right-footed2", "color": "black2"}, {"name": "Suarez3", "footed": "right-footed3", "color": "black3"}, {"name": "Suarez4", "footed": "right-footed4", "color": "black4"}, {"name": "Suarez5", "footed": "right-footed5", "color": "black5"}, {"name": "Suarez6", "footed": "right-footed6", "color": "black6"} ] list_dicts_2 = [ {"name": "Messi", "footed": "left-footed", "color": "blue"}, {"name": "Messi2", "footed": "left-footed2", "color": "blue2"}, {"name": "Messi3", "footed": "left-footed3", "color": "blue3"} ] # 合并两个列表 combined_list = list_dicts_1 + list_dicts_2 # 初始化三个目标列表 target_list_1, target_list_2, target_list_3 = [], [], [] # 按索引模3分配元素 for idx, item in enumerate(combined_list): if idx % 3 == 0: target_list_1.append(item) elif idx % 3 == 1: target_list_2.append(item) else: target_list_3.append(item) # 打印结果验证 print("目标列表1:", target_list_1) print("目标列表2:", target_list_2) print("目标列表3:", target_list_3)
说明:假设合并后总共有9个元素,三个目标列表各分到3个;如果是10个元素,第一个列表会多1个,完全符合“均匀”的要求。
方案2:保持原列表元素穿插的均匀分配
如果你需要避免某个目标列表集中来自其中一个原列表的元素,可以用这个方案——交替从两个原列表取元素,轮流分配到三个目标列表里,同时保证数量均匀。
示例代码:
# 你的两个字典列表 list_dicts_1 = [ {"name": "Suarez", "footed": "right-footed", "color": "black"}, {"name": "Suarez2", "footed": "right-footed2", "color": "black2"}, {"name": "Suarez3", "footed": "right-footed3", "color": "black3"}, {"name": "Suarez4", "footed": "right-footed4", "color": "black4"}, {"name": "Suarez5", "footed": "right-footed5", "color": "black5"}, {"name": "Suarez6", "footed": "right-footed6", "color": "black6"} ] list_dicts_2 = [ {"name": "Messi", "footed": "left-footed", "color": "blue"}, {"name": "Messi2", "footed": "left-footed2", "color": "blue2"}, {"name": "Messi3", "footed": "left-footed3", "color": "blue3"} ] # 初始化三个目标列表 target_list_1, target_list_2, target_list_3 = [], [], [] # 指针分别遍历两个原列表 ptr1, ptr2 = 0, 0 # 当前要分配的目标列表索引(0=列表1,1=列表2,2=列表3) current_target = 0 # 循环直到两个原列表都遍历完 while ptr1 < len(list_dicts_1) or ptr2 < len(list_dicts_2): # 先处理第一个列表的元素(如果还有剩余) if ptr1 < len(list_dicts_1): if current_target == 0: target_list_1.append(list_dicts_1[ptr1]) elif current_target == 1: target_list_2.append(list_dicts_1[ptr1]) else: target_list_3.append(list_dicts_1[ptr1]) ptr1 += 1 current_target = (current_target + 1) % 3 # 再处理第二个列表的元素(如果还有剩余) if ptr2 < len(list_dicts_2): if current_target == 0: target_list_1.append(list_dicts_2[ptr2]) elif current_target == 1: target_list_2.append(list_dicts_2[ptr2]) else: target_list_3.append(list_dicts_2[ptr2]) ptr2 += 1 current_target = (current_target + 1) % 3 # 打印结果验证 print("目标列表1:", target_list_1) print("目标列表2:", target_list_2) print("目标列表3:", target_list_3)
说明:这个方案会让两个原列表的元素尽可能均匀地分布在三个目标列表中,不会出现某一个目标列表全是list_dicts_1或者list_dicts_2的元素。
内容的提问来源于stack exchange,提问作者adbSOeh
相关产品推荐
相关产品推荐

