基于每个字符串中的子字符串对字符串列表进行排序

时间:2015-06-25 10:42:28

标签: python string list sorting

我有一个如下列表:

 a = ['e8:04:62:23:57:d0\t2462\t-55\t[WPA2-PSK-CCMP][ESS]\tTest', '00:1b:2f:48:8b:f2\t2462\t-57\t[WPA2-PSK-CCMP-preauth][ESS]\tT_test', 'e8:04:62:23:4e:70\t2437\t-61\t[WPA2-PSK-CCMP][ESS]\tT_guest', 'e8:04:62:23:57:d1\t2462\t-53\t[ESS]\t', 'e8:04:62:23:4e:71\t2437\t-56\t[ESS]\t']

我想根据每个元素的第三个标签之后的数字对列表进行排序,因此在这种情况下-55,-57,-61,-53应该将列表顺序更改为-53,-55,-57, -61。我试过的任何方式看起来都很复杂(制作列表清单等等)。我应该使用正则表达式/模式来简化这个吗?

2 个答案:

答案 0 :(得分:4)

您可以在此处将自定义lambda传递给sorted函数以获得所需的结果:

>>> a = ['e8:04:62:23:57:d0\t2462\t-55\t[WPA2-PSK-CCMP][ESS]\tTest', '00:1b:2f:48:8b:f2\t2462\t-57\t[WPA2-PSK-CCMP-preauth][ESS]\tT_test', 'e8:04:62:23:4e:70\t2437\t-61\t[WPA2-PSK-CCMP][ESS]\tT_guest', 'e8:04:62:23:57:d1\t2462\t-53\t[ESS]\t', 'e8:04:62:23:4e:71\t2437\t-56\t[ESS]\t']
>>> sorted(a, key = lambda x: int(x.split("\t")[2]), reverse=True)
['e8:04:62:23:57:d1\t2462\t-53\t[ESS]\t', 'e8:04:62:23:57:d0\t2462\t-55\t[WPA2-PSK-CCMP][ESS]\tTest', 'e8:04:62:23:4e:71\t2437\t-56\t[ESS]\t', '00:1b:2f:48:8b:f2\t2462\t-57\t[WPA2-PSK-CCMP-preauth][ESS]\tT_test', 'e8:04:62:23:4e:70\t2437\t-61\t[WPA2-PSK-CCMP][ESS]\tT_guest']

答案 1 :(得分:1)

def make_sorted_list(l):
    sorted_list = []
    sorted_vals = sorted([int(s.split('\t')[2]) for s in l], reverse=True)
    for val in sorted_vals:
        for s in l:
            if int(s.split('\t')[2]) == val:
                sorted_list.append(s)
    return sorted_list