【问题标题】:how to sort python objects using key of python list [duplicate]如何使用python列表的键对python对象进行排序[重复]
【发布时间】:2018-04-04 17:33:05
【问题描述】:

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

['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 是这样的方式 - 如果字符数相等,则字符串需要按字母顺序排序。

【问题讨论】:

  • 到目前为止您尝试过什么?您尝试过的技术有哪些具体问题?
  • 您实际上可以使用key=,就像在java中使用comparator一样
  • [b-3,a-2,c-4,d-2] 不是字符串,你的意思是['b-3', 'a-2', 'c-4', 'd-2']
  • @setushwetank,请查看新标记的副本。

标签: python


【解决方案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

【讨论】:

  • 这些反对意见很严厉。如果是因为它是骗子,那么至少也将问题提出来-或发表评论!我想有时人们喜欢跟风。这是一个很好的答案。
  • @vaultah,更新为带有单拆分的不健康单线 :)。
猜你喜欢
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 2016-09-16
相关资源
最近更新 更多