【问题标题】:Python3: Make itemgetter sort by string lengthPython3:使itemgetter按字符串长度排序
【发布时间】:2015-03-15 16:48:22
【问题描述】:

我正在使用下面的代码行按特定键的值对字典列表进行排序。该代码确实执行了所需的排序。但是,它按字母数字顺序而不是按字符串长度排序。如何更改 itemgetter 的行为并使其按长度排序?

sorted(DATABASE, key=itemgetter('SPECIAL_KEY'), reverse=True)

注意:在脚本中,itemgetter 是通过“from operator import itemgetter”导入的。

编辑:下面是我尝试排序的一些示例数据。

未分类:

DATABASE = [
    {'SPECIAL_KEY': 'LONG STRING', 'VARIOUS':'DATA'},
    {'SPECIAL_KEY': 'SHORT STRING', 'VARIOUS':'DATA'},
    {'SPECIAL_KEY': 'VERY LONG STRING', 'VARIOUS':'DATA'},
    {'SPECIAL_KEY': 'MEDIUM STRING', 'VARIOUS':'DATA'},
]

期望:

DATABASE = [
    {'SPECIAL_KEY': 'VERY LONG STRING', 'VARIOUS':'DATA'},
    {'SPECIAL_KEY': 'LONG STRING', 'VARIOUS':'DATA'},
    {'SPECIAL_KEY': 'MEDIUM STRING', 'VARIOUS':'DATA'},
    {'SPECIAL_KEY': 'SHORT STRING', 'VARIOUS':'DATA'},
]

【问题讨论】:

    标签: python arrays list sorting python-3.x


    【解决方案1】:

    你需要传递一个自定义函数来做到这一点:

    sorted(DATABASE, key=lambda x: len(x['SPECIAL_KEY']), reverse=True)
    

    要对列表进行就地排序,您需要使用list.sort 而不是sortedsorted 返回一个新列表):

    DATABASE.sort(key=lambda x: len(x['SPECIAL_KEY']), reverse=True)
    

    【讨论】:

    • 谢谢,但没有数据被移动/排序。但不会产生任何错误。
    • @DevynCollierJohnson, sorted 不对列表进行就地排序,而是返回一个新的排序列表。如果要对列表进行排序,请使用list.sortDATABASE.sort(key=lambda x: len(x['SPECIAL_KEY']), reverse=True)
    • 谢谢。这行得通。很抱歉对于这个误会。我总是把“排序”和“排序”弄错。
    猜你喜欢
    • 2015-06-29
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    相关资源
    最近更新 更多