【问题标题】:Sorting list of strings based on substring in each string根据每个字符串中的子字符串对字符串列表进行排序
【发布时间】:2015-09-11 22:13:41
【问题描述】:

我有一个如下列表:

 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。我尝试过的任何方式似乎都非常复杂(制作列表等)。我应该使用正则表达式/模式来简化它吗?

【问题讨论】:

    标签: python string list sorting


    【解决方案1】:

    您可以在此处将自定义 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']
    

    【讨论】:

    • 谢谢,这比我做的更简洁和“pythonic”。
    • 别忘了使用int.(获取字典顺序)
    • 这个解决方案有问题,你必须把它转换成int阅读这个问题:stackoverflow.com/questions/3270680/…
    • 谢谢,我可以看到这里有一个错误,如果我使用 int 解决方案不起作用,它会先从我想要的 -61 向后排序。必须添加reverse=True 以及int
    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 2020-02-20
      • 2015-08-13
      • 2021-10-13
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2019-07-13
      • 1970-01-01
      相关资源
      最近更新 更多