我有我的代码设置,所以它得到一个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]
有什么东西可以让我轻松实现这个目标吗?
该 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。根据值是 True
或 False
(或看作是整数) 1
或 0
). 第二个值对于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)