排序编号列表



我似乎找不到有关如何正确对这样的列表进行正确分类的任何信息。我的清单看起来像这样

["1. Banana", "2. Pear", "11. Apple", "5. Grapes", "4. Orange"]

使用sorted()使我拥有以下

['1. Banana', '11. Apple', '2. Pear', '3. Orange', '4. Grapes']

我希望它像这样

['1. Banana', '2. Pear', '3. Orange', '4. Grapes', '11. Apple']


如果添加了任何并发症,我需要使用它来使用特定键的值对字典列表进行排序,因此我的当前代码是

list.sort(key=lambda k: k["key"])

通过 .排序第一个 int值作为排序 key

sorted(lst, key=lambda x: int(x.split('.')[0]))

示例:

In [20]: lst = ["1. Banana", "2. Pear", "11. Apple", "5. Grapes", "4. Orange"]
In [21]: sorted(lst, key=lambda x: int(x.split('.')[0]))
Out[21]: ['1. Banana', '2. Pear', '4. Orange', '5. Grapes', '11. Apple']

对于更坚固的解决方案,使用REGEX从字符串项中获取数字,并使用它来对您的列表进行排序:

>>> from re import compile
>>> 
>>> regex = compile('d+')
>>> lst = ["1. Banana", "2. Pear", "11. Apple", "5. Grapes", "4. Orange"]
>>> sorted(lst, key= lambda el: int(regex.search(el).group()))
['1. Banana', '2. Pear', '4. Orange', '5. Grapes', '11. Apple']
>>> 

这样,即使数字不是字符串的第一部分,您的代码也不会失败:

>>> lst = ["Banana 1.", "2. Pear", "11. Apple", "5. Grapes", "4. Orange"]
>>> sorted(lst, key= lambda el: int(regex.search(el).group()))
['Banana 1.', '2. Pear', '4. Orange', '5. Grapes', '11. Apple']
>>> 

我认为,您应该将此数据存储为词典:

lst = ["1. Banana", "2. Pear", "11. Apple", "5. Grapes", "4. Orange"]
d = dict((int(j[0]), j[1]) for j in [i.split('. ') for i in lst])
# {1: 'Banana', 2: 'Pear', 4: 'Orange', 5: 'Grapes', 11: 'Apple'}

然后排序是微不足道的:

sorted(d.items())
# [(1, 'Banana'), (2, 'Pear'), (4, 'Orange'), (5, 'Grapes'), (11, 'Apple')]

,格式化:

['. '.join((str(a), b)) for a, b in sorted(d.items())]
# ['1. Banana', '2. Pear', '4. Orange', '5. Grapes', '11. Apple']

最新更新