首页 > 解决方案 > 指定对字符串列表进行排序的键

问题描述

我正在尝试按两个值对 python 中的字符串列表进行排序。我想出的是:

import operator
l = ['A1 B2', 'A2 B2', 'A1 B3', 'A2 B1', 'A1 B1']
sorted(l, key=operator.itemgetter(1, 4))
['A1 B1', 'A1 B2', 'A1 B3', 'A2 B1', 'A2 B2']

但是,键的位置是相对硬编码的,如果字符串更改为['AA1 BB2', 'AA2 BB2', 'AA1 BB3', 'AA2 BB1', 'AA1 BB1'],它将不起作用。此外,这些数字也可以多于一位['A1 B202', 'A2 B101', 'A1 B200', 'A2 B100', 'A1 B201']

如何更优雅地按两位数对字符串列表进行排序?

标签: python

解决方案


第三方模块有效吗?您可以使用natsort拆分和自然排序的键:

>>> import natsort
>>> natsort.natsorted(l, key=str.split)
['AA1 BB1', 'AA1 BB2', 'AA1 BB3', 'AA2 BB1', 'AA2 BB2']

您可以natsort使用pip.

  • 当有多个数字时应该工作
  • 当每个字符串超过两个单词时也应该工作。
  • 当数字不在字符串末尾时也应该工作

对于此处提供的示例,排序是自然完成的,而不是像其他答案一样按字典顺序完成,这些答案巧合地返回与自然排序相同的答案。


推荐阅读