首页 > 解决方案 > 组织字母数字字符串列表

问题描述

我有一组带有索引的代码:

alpha_numeric_set = {
"ASN 111",
"ASN 125",
"ASP 105",
"ASP 97",
"GLN 130",
"GLN 66",
"GLY 107",
"ILE 100",
"ILE 112",
"ILE 98",
"LEU 129",
"LEU 131",
"LEU 99",
"LYS 127",
"PHE 103",
"PHE 153",
"PRO 110",
"PRO 128",
"PRO 96",
"SER 109",
"THR 90",
"TRP 68",
"TYR 126",
"TYR 64",
"VAL 106",
"VAL 115",
"VAL 132",
"VAL 95 "  
}


我希望能够按时间顺序按索引号和按字母顺序对代码名称进行排序。我已经设法得到了我想要的一半,(即,sorted(alpha_numeric_set)用来按字母顺序排序代码)但我不知道如何对代码和索引号进行排序。

我希望设置输出为

ASP 97
ASP 105
GLN 66
GLN 130

etc, etc

而不是:

ASP 105
ASP 97
GLN 130
GLN 66

etc, etc

我尝试使用.split()然后重新加入每个字符串来分解每个字符串,但这会将索引与错误的代码配对。

标签: python

解决方案


您可以执行以下操作:

def alpha_numeric_key(e):
    s, t = e.split()
    return s, int(t)


result = sorted(alpha_numeric_set, key=alpha_numeric_key)
print(result)

输出

['ASN 111', 'ASN 125', 'ASP 97', 'ASP 105', 'GLN 66', 'GLN 130', 'GLY 107', 'ILE 98', 'ILE 100', 'ILE 112', 'LEU 99', 'LEU 129', 'LEU 131', 'LYS 127', 'PHE 103', 'PHE 153', 'PRO 96', 'PRO 110', 'PRO 128', 'SER 109', 'THR 90', 'TRP 68', 'TYR 64', 'TYR 126', 'VAL 95 ', 'VAL 106', 'VAL 115', 'VAL 132']

推荐阅读