Python输出排序

问题描述 投票:-1回答:1

我有我的代码设置,所以它得到一个API和输出某些变量到一个.txt文件,但我希望它自己的顺序,而不是通过字母顺序或任何东西,但在优先顺序,所以如果一个变量是MVP,它将被放置在较高的.txt作为VIP和80将高于20这是一个例子的.txt。

[email protected] : thegiant20** [10]
[email protected] : Rancher** [1] [VIP]
[email protected] : dogdad** [4] [VIP]
[email protected] : mb1mi** [0]
[email protected] : shalexa** [18] [MVP_PLUS]

但我希望它订购,所以它是这样的。

[email protected] : shalexa** [18] [MVP_PLUS]
[email protected] : dogdad** [4] [VIP]
[email protected] : Rancher** [1] [VIP]
[email protected] : thegiant20** [10]
[email protected] : mb1mi** [0]

有什么东西可以让我轻松实现这个目标吗?

python list sorting output
1个回答
0
投票

sort 办法 list 拥有 key 参数,在这里你可以提供一个确定排序顺序的函数。这个函数要找到它是MVP还是VIP,它要找到方括号里的值。

import re

def main():
    lines = [
        '[email protected] : thegiant20** [10]',
        '[email protected] : Rancher** [1] [VIP]',
        '[email protected] : dogdad** [4] [VIP]',
        '[email protected] : mb1mi** [0]',
        '[email protected] : shalexa** [18] [MVP_PLUS]',
    ]

def sortkey(value):
    is_mvp = '[MVP' in value
    is_vip = '[VIP' in value
    group = re.search(r'\[(\d+)\]', value)
    number = int(group[1])
    return is_mvp, is_vip, number

    lines.sort(key=sortkey, reverse=True)
    for line in lines:
        print(line)


if __name__ == '__main__':
    main()

比较是用一个元组来完成的。第一个值说如果我们有一个MVP。根据值是 TrueFalse (或看作是整数) 10). 第二个值对于VIP来说是一样的。最后一个值是括号中的数字转换成整数。

计算结果

[email protected] : shalexa** [18] [MVP_PLUS]
[email protected] : dogdad** [4] [VIP]
[email protected] : Rancher** [1] [VIP]
[email protected] : thegiant20** [10]
[email protected] : mb1mi** [0]

在 "我 "中添加以下一行 sortkey 函数前 return 你会看到为它生成的值和键,并用于排序。

    print(f'{value} -> key ({int(is_mvp)}, {int(is_vip)}, {number})')

輸出

[email protected] : thegiant20** [10] -> key (0, 0, 10)
[email protected] : Rancher** [1] [VIP] -> key (0, 1, 1)
[email protected] : dogdad** [4] [VIP] -> key (0, 1, 4)
[email protected] : mb1mi** [0] -> key (0, 0, 0)
[email protected] : shalexa** [18] [MVP_PLUS] -> key (1, 0, 18)
© www.soinside.com 2019 - 2024. All rights reserved.