我使用下面的代码行按特定键的值对字典列表进行排序。代码确实执行了所需的排序。但是,它按字母数字顺序排序,而不是按字符串长度排序。如何更改项目符号的行为并按长度排序?
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'},
]
答案 0 :(得分:4)
您需要传递自定义函数才能执行此操作:
sorted(DATABASE, key=lambda x: len(x['SPECIAL_KEY']), reverse=True)
要对列表进行排序,您需要使用list.sort
代替sorted
(sorted
返回新列表):
DATABASE.sort(key=lambda x: len(x['SPECIAL_KEY']), reverse=True)