Python3:使项目符号按字符串长度排序

时间:2015-01-17 00:26:10

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

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

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

注意:在脚本中,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'},
]

1 个答案:

答案 0 :(得分:4)

您需要传递自定义函数才能执行此操作:

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)