如何统计行列键格式字典中每行的列数?
解决方法:统计字典中每行的列数
先帮你理清之前代码的问题:
- 条件判断
if 'r%dc' in key完全错误,%d是Python的格式化占位符,不是字符串里的实际内容,这个条件永远不会触发,等于没统计任何键。 - 用
key[:2]提取行标识只适配行号是个位数的情况(比如r1、r2),如果遇到r10c3这种行号是两位数的键,就会错误提取成r1,统计结果直接出错。
下面是用Counter实现的正确方案,不管行号是几位数都能正常统计:
代码实现
from collections import Counter # 示例输入字典(你可以替换成自己的row_dic) row_dic = {"r1c1": "val1", "r2c1": "val2", "r5c1": "v51", "r5c2": "v52", "r5c3": "v53", "r5c4": "v54"} # 1. 提取每个键的行标识(比如r1c1提取r1,r5c2提取r5),统计每行的键数量 row_counter = Counter(key.split('c')[0] for key in row_dic.keys()) # 2. 转换成你期望的{'r1c':1, 'r2c':1, 'r5c':4}格式 formatted_result = {f"{row_id}c": count for row_id, count in row_counter.items()} print(formatted_result) # 输出: {'r1c': 1, 'r2c': 1, 'r5c': 4} # 3. 转换成列表形式[[1], [1], [4], ...](按行号排序) # 先按行号数字排序 sorted_rows = sorted(row_counter.items(), key=lambda x: int(x[0][1:])) list_result = [[count] for row_id, count in sorted_rows] print(list_result) # 输出: [[1], [1], [4]]
补充:处理不连续的行号
如果你的行号不是连续的(比如存在r1、r2、r5,但没有r3、r4),想要生成连续的列表(缺失行显示0),可以这样做:
# 找到最大的行号 max_row_num = max(int(row_id[1:]) for row_id in row_counter.keys()) # 生成从1到max_row_num的连续列表 continuous_list = [[row_counter.get(f'r{i}', 0)] for i in range(1, max_row_num + 1)] print(continuous_list) # 输出: [[1], [1], [0], [0], [4]]
内容的提问来源于stack exchange,提问作者hux0
相关产品推荐
相关产品推荐

