簡體   English   中英

組織字母數字字符串列表

[英]Organizing a list of alpha-numeric strings

我有一組帶有索引的代碼:

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)使代碼按字母順序排序)但我不知道如何對代碼和索引號進行排序。

我想將 output 設置為

ASP 97
ASP 105
GLN 66
GLN 130

etc, etc

而不是:

ASP 105
ASP 97
GLN 130
GLN 66

etc, etc

我嘗試使用.split()分解每個字符串,然后重新加入每個字符串,但這會將索引與錯誤的代碼配對。

您可以執行以下操作:

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


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

Output

['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']

你想在這里實現的是自然排序 當然,您可以手動為您的數據執行此操作,它有一個簡單的模式,但是有一個名為natsort的庫可以為任何字符串實現自然排序:

from natsort import natsorted

result = natsorted(alpha_numeric_set)
print(result)
# ['ASN 111', 'ASN 125', 'ASP 97', 'ASP 105', 'GLN 66', 'GLN 130' ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM