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

按字符串多部分排序:基于指定规则排序特定格式字符串列表

按指定顺序对字符串列表排序的解决方案

要实现先按A部分(指定顺序['C1','C2','C3','T1','T2', 'T3'])、再按B部分(指定顺序['3s','6m','1h','8h','24h'])的排序逻辑,我们可以通过自定义排序键来实现,具体步骤如下:

1. 定义优先级映射字典

首先给A和B的每个可选值分配一个优先级数字,数字越小代表排序越靠前,这样排序时就能严格遵循你指定的顺序:

# A部分的优先级:按C1→C2→C3→T1→T2→T3的顺序
a_priority = {'C1': 0, 'C2': 1, 'C3': 2, 'T1': 3, 'T2': 4, 'T3': 5}
# B部分的优先级:按3s→6m→1h→8h→24h的顺序
b_priority = {'3s': 0, '6m': 1, '1h': 2, '8h': 3, '24h': 4}

2. 编写排序键提取函数

接下来需要从每个字符串中拆解出A和B部分,然后返回对应的优先级元组(A优先级在前,B优先级在后):

def get_sort_key(s):
    # 提取A部分:分割字符串后取中间的A值
    # 示例:'Vout_C1-3sNP-N' → split('_')得到['Vout', 'C1-3sNP-N'] → 再split('-')取第一个元素'C1'
    a_part = s.split('_')[1].split('-')[0]
    
    # 提取B部分:从分割后的字符串中匹配B的可选值
    # 示例:'Vout_C1-3sNP-N' → split('-')得到['Vout_C1', '3sNP-N'] → 遍历B的可选值找到匹配的'3s'
    b_part = None
    for b_val in b_priority.keys():
        if b_val in s.split('-')[1]:
            b_part = b_val
            break
    
    # 返回优先级元组,sorted会先按第一个元素排序,再按第二个元素排序
    return (a_priority[a_part], b_priority[b_part])

3. 执行排序

最后用Python内置的sorted()函数,传入自定义的排序键函数即可得到结果:

# 示例输入列表
input_list = [
    'Vout_T1-24hNP-N',
    'Vout_C1-6mNP-N',
    'Vout_C3-3sNP-N',
    'Vout_C1-3sNP-N',
    'Vout_T2-1hNP-N',
    'Vout_C1-24hNP-N',
    'Vout_C1-8hNP-N',
    'Vout_C1-1hNP-N'
]

# 执行排序
sorted_list = sorted(input_list, key=get_sort_key)

# 打印结果
for item in sorted_list:
    print(item)

输出结果:

Vout_C1-3sNP-N
Vout_C1-6mNP-N
Vout_C1-1hNP-N
Vout_C1-8hNP-N
Vout_C1-24hNP-N
Vout_C3-3sNP-N
Vout_T1-24hNP-N
Vout_T2-1hNP-N

原理说明

Python的sorted()函数在处理元组类型的排序键时,会先比较元组的第一个元素,当第一个元素相同时,再比较第二个元素,完美匹配了你"先按A顺序、再按B顺序"的排序需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:29:15