如何使用pythonlis的键对python对象进行排序

2024-04-26 05:41:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下格式的字符串列表:

['b-3','a-2','c-4','d-2']

需要以这样一种方式排序,即列表按数字排序(后面是-)。如果数字相等,字符串需要按字母顺序排序。输出应为

['a-2','d-2','b-3','c-4']

我可以使用comparator/comparable在JAVA中轻松实现。如何通过用python编写函数来实现这一点。你知道吗

list.sort(key= )

import sys
from collections import Counter, OrderedDict
def sortfunc(item):
    key,value = item.split('-')
    return value


if __name__ == "__main__":
    s = input().strip()
    c = Counter(s)

    lst = []

    for key in c:
        lst.append(key+'-'+str(c[key]))

    lst.sort(key=lambda x :sortfunc(x), reverse=True)
    print(lst)

输出为:

['b-3', 'c-2', 'a-2', 'e-1', 'd-1']

现在,我需要帮助来增强sortFunc是这样的方式-如果字符数相等,那么字符串需要按字母顺序排序。你知道吗


Tags: key字符串import列表排序顺序value字母
1条回答
网友
1楼 · 发布于 2024-04-26 05:41:01

这是一种方法。你知道吗

lst = ['b-3', 'a-2', 'c-4', 'd-2']

res = sorted(lst, key=lambda x: (lambda y: (int(y[1]), y[0]))(x.split('-')))

# ['a-2', 'd-2', 'b-3', 'c-4']

解释

  • sortedkey参数和自定义lambda函数一起使用。你知道吗
  • 元组比较是按元组索引的顺序进行的。你知道吗
  • 记住将第一个元组值转换为int进行整数比较。你知道吗
  • 不能直接使用x.split('-')[::-1],因为需要将其中一个值转换为int。你知道吗

相关问题 更多 >