繁体   English   中英

如何对 python 中包含字母数字数据的列表进行排序

[英]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 张卡片......到目前为止我尝试的所有内容都导致错误或按字母顺序排序命令。

使用sortedkey参数,例如:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM