Python如何实现字典内各列表同索引元素分组(忽略空列表)
实现方案
直接用Python标准库itertools.zip_longest即可,不需要安装第三方依赖,对不等长列表、大规模数据的处理效率很高。zip_longest会以输入序列中最长的列表为基准做逐位聚合,长度不足的位置默认填充None,你只需要提前过滤掉字典里的空列表,最后再把每个聚合组里的None值去掉就行。
参考代码:
from itertools import zip_longest bbox = {'0': ['a', 'b', 'c', 'l', 'm'], '1': ['d', 'e'], '2': ['f', 'g'], '3': ['h'], '4': [], '5': ['i', 'j', 'k']} # 取出字典所有值,过滤掉空列表 valid_lists = [lst for lst in bbox.values() if lst] # 按索引位跨列表聚合 raw_groups = zip_longest(*valid_lists) # 去掉每个分组里的填充空值,得到最终结果 output = [[item for item in group if item is not None] for group in raw_groups]
运行后得到的output和预期结果完全一致:
[ ['a', 'd', 'f', 'h', 'i'], ['b', 'e', 'g', 'j'], ['c', 'k'], ['l'], ['m'] ]
注意事项
- 不要直接用内置函数
zip做聚合:zip会以最短的输入列表为基准截断内容,长列表靠后的元素会直接丢失,不符合需求。 - 这个实现基于迭代器逻辑,内存开销很低,哪怕字典有300个以上键值对、各列表长度未知,都能稳定高效运行。
内容的提问来源于stack exchange,提问作者Muhammad Anas Raza
相关产品推荐
相关产品推荐

