如何批量拆分列表中的字符串值并完成层级统计分析?
问题描述
我有一个包含约25000个字符串值的列表,格式如下:
a = ['1-0.0','1-0.1','4-0.1','4-0.2','4-1.0','4-1.1','4-2.0',...,'23012-11.23']
每个字符串(以4-0.1为例)中:4对应x,0对应y,1对应z。
我希望对该数据进行分析,得到如下格式的统计信息:
以x开头的共有n个值。 其中,中间值为y的有n个,对应的z值为(n1,n2)。
以示例中的x=4为例,期望输出如下:
以4开头的共有5个值。 其中,中间值为0的有2个,对应的z值为(1,2)。 其中,中间值为1的有2个,对应的z值为(0,1)。 其中,中间值为2的有1个,对应的z值为(0)。
请问是否存在方法可以一次性拆分列表中的这些值并得到上述统计结果?
解决方案
当然可以,用Python就能高效处理这类统计需求,核心思路是嵌套字典分组统计:先按x分组,再按y分组收集z值,最后格式化输出结果。
实现代码
from collections import defaultdict # 示例数据 a = ['1-0.0','1-0.1','4-0.1','4-0.2','4-1.0','4-1.1','4-2.0'] # 构建嵌套统计结构:x -> {y: [z1, z2, ...]} stats = defaultdict(lambda: defaultdict(list)) for s in a: # 拆分字符串:先按'-'分割出x和yz段,再按'.'分割y和z x_part, yz_part = s.split('-') y, z = yz_part.split('.') # 分组收集z值(如需转数值类型,可在此处加int()/float()转换) stats[x_part][y].append(z) # 格式化输出统计结果 for x, y_groups in stats.items(): total = sum(len(z_list) for z_list in y_groups.values()) print(f"以{x}开头的共有{total}个值。") for y, z_list in y_groups.items(): z_str = ', '.join(z_list) print(f" 其中,中间值为{y}的有{len(z_list)}个,对应的z值为({z_str})。")
输出结果
运行上述代码后,针对示例数据会输出:
以1开头的共有2个值。 其中,中间值为0的有2个,对应的z值为(0, 1)。 以4开头的共有5个值。 其中,中间值为0的有2个,对应的z值为(1, 2)。 其中,中间值为1的有2个,对应的z值为(0, 1)。 其中,中间值为2的有1个,对应的z值为(0)。
补充说明
defaultdict可以自动创建嵌套字典结构,省去手动判断键是否存在的麻烦;- 25000条数据的处理速度极快,不会有性能瓶颈;
- 如果需要将x/y/z转为数值类型(比如整数),只需在拆分后添加
int(x_part)这类转换代码即可。
内容的提问来源于stack exchange,提问作者Suman KK
相关产品推荐
相关产品推荐

