You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按Excel单元格地址规则对Python字典的键进行排序?

解决方案

要实现按Excel单元格的自然顺序(先按行号升序,同内行按列字母升序)排序字典,核心是给sorted()函数自定义排序规则——默认字符串排序会把"B10"排在"B2"前面(字符串比较时"1" < "2"),不符合Excel的单元格排序逻辑。

实现思路

拆分每个单元格地址的列字母和行号,将行号转为整数(保证数字按数值大小排序),然后以(行号, 列字母)作为排序键,对字典的键值对进行排序,最后转换为有序字典(Python 3.7+ 原生字典已支持有序)。

完整代码示例

import re

# 原字典
cell_dict = {"A1":"value1", "C1":"value3", "B1":"value2", "C2":"value6", "A2":"value4", "B2":"value5", "B10":"value7", "C10":"value8"}

# 提取排序键:拆分列字母与行号
def get_sort_key(cell_addr):
    match = re.match(r'([A-Za-z]+)(\d+)', cell_addr)
    if match:
        col = match.group(1).upper()
        row = int(match.group(2))
        # 排序优先级:行号(整数)> 列字母(字符串)
        return (row, col)
    return (0, cell_addr)  # 兼容异常格式的地址

# 排序并生成目标字典
sorted_dict = dict(sorted(cell_dict.items(), key=lambda x: get_sort_key(x[0])))

# 输出验证
for k, v in sorted_dict.items():
    print(f'"{k}":"{v}",')

运行结果

"A1":"value1",
"B1":"value2",
"C1":"value3",
"A2":"value4",
"B2":"value5",
"C2":"value6",
"B10":"value7",
"C10":"value8",

可选替代方案(无需正则)

如果不需要处理"AA12"这类多列字母的地址,也可以用遍历拆分的方式提取行号和列字母:

def get_sort_key(cell_addr):
    split_idx = 0
    while split_idx < len(cell_addr) and cell_addr[split_idx].isalpha():
        split_idx += 1
    col = cell_addr[:split_idx].upper()
    row = int(cell_addr[split_idx:])
    return (row, col)

内容的提问来源于stack exchange,提问作者ecopy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:20:30