Python3: 使itemgetter按字符串长度排序
Python3: Make itemgetter sort by string length
我正在使用下面的代码行按特定键的值对字典列表进行排序。该代码确实执行了所需的排序。但是,它按字母数字顺序而不是字符串长度排序。如何更改 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'},
]
您需要传递一个自定义函数来执行此操作:
sorted(DATABASE, key=lambda x: len(x['SPECIAL_KEY']), reverse=True)
要就地排序列表,您需要使用 list.sort
而不是 sorted
(sorted
returns 一个新列表):
DATABASE.sort(key=lambda x: len(x['SPECIAL_KEY']), reverse=True)
我正在使用下面的代码行按特定键的值对字典列表进行排序。该代码确实执行了所需的排序。但是,它按字母数字顺序而不是字符串长度排序。如何更改 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'},
]
您需要传递一个自定义函数来执行此操作:
sorted(DATABASE, key=lambda x: len(x['SPECIAL_KEY']), reverse=True)
要就地排序列表,您需要使用 list.sort
而不是 sorted
(sorted
returns 一个新列表):
DATABASE.sort(key=lambda x: len(x['SPECIAL_KEY']), reverse=True)