python - Python 中的自定义排序复杂字符串

标签 python regex string sorting tokenize

我有一个符合以下模式的文件名列表:s[num][alpha1][alpha2]​​.ext

我需要排序,首先按数字,然后按 alpha1,然后按 alpha2。然而,最后两个不是按字母顺序排列的,而是应该反射(reflect)自定义顺序。

我创建了两个列表来表示 alpha1 和 alpha2 的顺序,如下所示:

alpha1Order = ["Fizz", "Buzz", "Ipsum", "Dolor", "Lorem"]
alpha2Order = ["Sit", "Amet", "Test"]

最好的方法是什么?我的第一个想法是(以某种方式)标记化,以便将每个文件名分成其组成部分(s、num、alpha1、alpha2),然后排序,但我不太确定如何执行如此复杂的排序。使用关键功能似乎很笨拙,因为这种类型似乎不适合简​​单的排序。

最佳答案

一旦标记化,您的数据就可以通过 key 函数完美订购。只需返回该值的 alpha1Orderalpha2Order 列表的索引即可。将它们替换为字典以使查找更容易:

alpha1Order = {token: i for i, token in enumerate(alpha1Order)}
alpha2Order = {token: i for i, token in enumerate(alpha2Order)}

def keyfunction(filename):
    num, alpha1, alpha2 = tokenize(filename)
    return int(num), alpha1Order[alpha1], alpha2Order[alpha2]

这将返回一个要排序的元组; Python 将使用第一个值进行排序,将具有相同 int(num) 值的任何内容按第二个条目排序,使用第三个值来打破与前两个条目相关的任何值。

关于python - Python 中的自定义排序复杂字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21119628/

相关文章:

python - 如何在python openCV的窗口上显示图像结果

r - 使用 R 中的 str_count 计算整个单词/数字的出现次数

javascript - 从一系列可能的路径中获取字符串

c# - 如何从一个字符串复制到另一个字符串,从所需位置到结尾?

python - 二维数组中的 Tkinter 按钮绑定(bind)到相同的命令

javascript - 正在计算表达式 :- Javascript vs Python

python - 如何使用 twenacl 交换和验证临时公钥?

python - 在 Python 中使用原子分组的最佳方式?

javascript - 轻松替换值中多行的字符串

c# - 将工作日缩写字符串(包括范围)转换为 List<DayOfWeek>