python中按字段字母顺序对列表排序

2024-04-19 01:25:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下清单:

all=[
"jaeger.jaeger-span.jaeger-ell.spam 385062 1583408544",
"jaeger.jaeger-span.jaeger-ell.FindTraces 385062 1583408544",
"jaeger.jaeger-span.jaeger-on.GetOperations 5177 1583376432",
"jaeger.jaeger-span.jaeger-http.GetServices 5528 1583376528",
"jaeger.jaeger-span.jaeger-query.FindTraces 70681 1583386032",
"jaeger.jaeger-span.jaeger-as.GetOperations 5177 1583376432"
]

按findtraces字段的命令 我希望订购如下:

for i in all:
   print(i)

console:
jaeger.jaeger-span.jaeger-ell.FindTraces 385062 1583408544
jaeger.jaeger-span.jaeger-query.FindTraces 70681 1583386032   
jaeger.jaeger-span.jaeger-on.GetOperations 5177 1583376432
jaeger.jaeger-span.jaeger-as.GetOperations 5177 1583376432
jaeger.jaeger-span.jaeger-http.GetServices 5528 1583376528
jaeger.jaeger-span.jaeger-ell.spam 385062 1583408544

3条回答

你可以试试

In [66]: x = [
    ...: "jaeger.jaeger-span.jaeger-ell.spam 385062 1583408544",
    ...: "jaeger.jaeger-span.jaeger-ell.FindTraces 385062 1583408544",
    ...: "jaeger.jaeger-span.jaeger-on.GetOperations 5177 1583376432",
    ...: "jaeger.jaeger-span.jaeger-http.GetServices 5528 1583376528",
    ...: "jaeger.jaeger-span.jaeger-query.FindTraces 70681 1583386032",
    ...: "jaeger.jaeger-span.jaeger-as.GetOperations 5177 1583376432"
    ...: ]

In [67]: l = list(map(lambda a: a.split('.'), x))

In [68]: l
Out[68]:
[['jaeger', 'jaeger-span', 'jaeger-ell', 'spam 385062 1583408544'],
 ['jaeger', 'jaeger-span', 'jaeger-ell', 'FindTraces 385062 1583408544'],
 ['jaeger', 'jaeger-span', 'jaeger-on', 'GetOperations 5177 1583376432'],
 ['jaeger', 'jaeger-span', 'jaeger-http', 'GetServices 5528 1583376528'],
 ['jaeger', 'jaeger-span', 'jaeger-query', 'FindTraces 70681 1583386032'],
 ['jaeger', 'jaeger-span', 'jaeger-as', 'GetOperations 5177 1583376432']]

In [69]: l.sort(key=lambda x: x[3])

In [70]: l
Out[70]:
[['jaeger', 'jaeger-span', 'jaeger-ell', 'FindTraces 385062 1583408544'],
 ['jaeger', 'jaeger-span', 'jaeger-query', 'FindTraces 70681 1583386032'],
 ['jaeger', 'jaeger-span', 'jaeger-on', 'GetOperations 5177 1583376432'],
 ['jaeger', 'jaeger-span', 'jaeger-as', 'GetOperations 5177 1583376432'],
 ['jaeger', 'jaeger-span', 'jaeger-http', 'GetServices 5528 1583376528'],
 ['jaeger', 'jaeger-span', 'jaeger-ell', 'spam 385062 1583408544']]

In [71]:

使用all.sort(reverse=False)对列表项进行排序

不确定是否有直接的方法。但是,您可以使用这个小代码片段来实现您所追求的目标:

all=[
"jaeger.jaeger-span.jaeger-ell.spam 385062 1583408544",
"jaeger.jaeger-span.jaeger-ell.FindTraces 385062 1583408544",
"jaeger.jaeger-span.jaeger-query.FindTraces 70681 1583386032",
"jaeger.jaeger-span.jaeger-on.GetOperations 5177 1583376432",
"jaeger.jaeger-span.jaeger-http.GetServices 5528 1583376528"
]

dic = {}
for str in all:
    key = str.split(" ")[0].split(".")[-1]
    dic[key]=str

sorted_keys = list(dic.keys())
sorted_keys.sort()
sorted_list = []
for key in sorted_keys:
    sorted_list.append(dic[key])
print(sorted_list)

相关问题 更多 >