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

时间:2018-04-04 17:33:06

标签: python

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

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

需要以这样的方式排序:列表按数字排序(后面 - )。如果数字相等,则需要按字母顺序对字符串进行排序。输出应该是

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

我可以使用比较器/可比较的方式在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的方式 - 如果字符数相等,那么字符串需要按字母顺序排序。

1 个答案:

答案 0 :(得分:1)

这是一种方式。

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