如果添加了任何并发症,我需要使用它来使用特定键的值对字典列表进行排序,因此我的当前代码是
我似乎找不到有关如何正确对这样的列表进行正确分类的任何信息。我的清单看起来像这样
["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']