所以我有一个字符串列表,我排序它:
list = [' R1O-GN | ile: 13 |', ' LXQ2-T | ile: 6 |', ' LXQ2-T | ile: 11 |', ' LXQ2-T | ile: 9 |', ' 4-HWWF | ile: 11 |', ' 4-HWWF | ile: 9 |', ' J-ZYSZ | ile: 12 |', ' UGR-J2 | ile: 8 |']
def ile_sort(elem):
return re.findall(r'ile: (d+)',elem)
list = sorted(list, key=ile_sort)
带6的字符串应该在前面,带13的字符串应该在后面,但实际结果是:
[' LXQ2-T | ile: 11 |', ' 4-HWWF | ile: 11 |', ' J-ZYSZ | ile: 12 |', ' R1O-GN | ile: 13 |', ' LXQ2-T | ile: 6 |', ' UGR-J2 | ile: 8 |', ' LXQ2-T | ile: 9 |', ' 4-HWWF | ile: 9 |']
问题是在这些列表项上使用re.findall()
返回列表内的字符串,例如:["13"]
要解决这个问题,将ile_sort()
方法替换为:
def ile_sort(elem):
return int(re.findall('ile: (d+)', elem)[0])
正如其他人已经提到的,您需要从传递给key
参数的函数中返回单个元素。(不是从findall
返回的列表)。该元素将用于排序。
您可以从findall
中获得第一项,或将findall
更改为search
并获取第一个组。不要忘记将最终结果转换为整数。
import re
lst = [' R1O-GN | ile: 13 |', ' LXQ2-T | ile: 6 |', ' LXQ2-T | ile: 11 |',
' LXQ2-T | ile: 9 |', ' 4-HWWF | ile: 11 |', ' 4-HWWF | ile: 9 |',
' J-ZYSZ | ile: 12 |', ' UGR-J2 | ile: 8 |']
def ile_sort(elem):
return int(re.search(r'ile: (d+)', elem).group(1))
lst = sorted(lst, key=ile_sort)
print(lst)
输出:[' LXQ2-T | ile: 6 |', ' UGR-J2 | ile: 8 |', ' LXQ2-T | ile: 9 |', ' 4-HWWF | ile: 9 |', ' LXQ2-T | ile: 11 |', ' 4-HWWF | ile: 11 |', ' J-ZYSZ | ile: 12 |', ' R1O-GN | ile: 13 |']