你的问题并不是很清楚,但我假设你忽略了每个元组中的第一项,而只在第二项中对列表进行排序。我还假设只有从'a'到'I'的字母可以出现在这个列表中。在
转换A->;1,b->;2,c->;3。。。i->;9是利用数字字符的ASCII码和小写字母是连续的这一事实。因此,在每个字母和它的等效数字之间有一个恒定的偏移量48。在
因此,要将字符串列表转换为键,我们可以将所有字符串合并为单个字符串,然后将字符串中的每个字母字符转换为等效的数字字符,将生成的字符重新连接为单个字符串,并将该字符串转换为整数。在lst = [
("a", ['8', '0']),
("a", ['7', '0b']),
("a", ['7', '0']),
("a", ['6', '0b']),
("a", ['6', '01']),
]
def keyfunc(t):
a = [chr(ord(c) - 48) if 'a' <= c <= 'i' else c for c in ''.join(t[1])]
return int(''.join(a))
new_lst = sorted(lst, key=keyfunc)
for row in new_lst:
print(row)
输出
^{pr2}$
顺便说一句,您不应该使用list作为变量名,因为这样会隐藏内置的list类型,这可能会导致神秘的错误。在