Python3:使 itemgetter 按字符串长度排序

Dev*_*son 3 python arrays sorting list python-3.x

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

sorted(DATABASE, key=itemgetter('SPECIAL_KEY'), reverse=True)
Run Code Online (Sandbox Code Playgroud)

注意:在脚本中,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'},
]
Run Code Online (Sandbox Code Playgroud)

期望:

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'},
]
Run Code Online (Sandbox Code Playgroud)

fal*_*tru 5

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

sorted(DATABASE, key=lambda x: len(x['SPECIAL_KEY']), reverse=True)
Run Code Online (Sandbox Code Playgroud)

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

DATABASE.sort(key=lambda x: len(x['SPECIAL_KEY']), reverse=True)
Run Code Online (Sandbox Code Playgroud)