[英]How to sort a list containing alphanumerical data in python
我查看了许多论坛和主题,但没有一个对我的数据有用。 我的数据类似于
list = ["JohnSmith : 10 cards", "AlexJones : 7 cards", "BillyBob : 19 cards", "JoeBlogs : 21 cards"...]
我想按数字顺序对其进行排序以获取数据,例如(在这种情况下)AlexJones:7 张卡片,JohnSmith:10 张卡片,Billybob:19 张卡片......到目前为止我尝试的所有内容都导致错误或按字母顺序排序命令。
使用sorted的key参数,例如:
import re
lst = ["JohnSmith : 10 cards", "AlexJones : 7 cards", "BillyBob : 19 cards", "JoeBlogs : 21 cards"]
def only_one_digit_group_key(s):
"""This function filters out non-digit characters, assumes only one contiguous group of digits"""
return int(''.join([e for e in s if e.isdigit()]))
def regex_key(s):
"""This function will extrac the digits from the pattern group of digits followed by cards"""
return int(re.search(r'(\d+)\s+cards', s).group(1))
print(sorted(lst, key=only_one_digit_group_key))
print(sorted(lst, key=regex_key))
Output
['AlexJones : 7 cards', 'JohnSmith : 10 cards', 'BillyBob : 19 cards', 'JoeBlogs : 21 cards']
['AlexJones : 7 cards', 'JohnSmith : 10 cards', 'BillyBob : 19 cards', 'JoeBlogs : 21 cards']
如果上面的代码清单你有两个关键功能的例子。
如果用空格分割值,则卡片的数量始终是第三个元素。 因此,您可以按空格分割,将此元素转换为 int 并将其用作键:
lst.sort(key = lambda x : int(x.split(' ')[2]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.