我是python的新手,我创建了一个脚本来对cisco路由器中的“show ip accounting”信息进行排序。该脚本读取文件并将每行分解为一个列表,然后创建每行的列表。所以我最终得到了一份清单:
list a = [[192.168.0.1,172.16.0.1,3434,12222424],[192.168.2.1,172.12.0.1,33334,12667896722424]]
我希望能够按列表中第三列或第四列排序。
我能够使用lambda函数来完成它,但我的问题是如何使用标准函数复制它?
这是我的代码:
from sys import argv
script, option, filename = argv
a=[]
b=[]
def openfile(filename):
file = open(filename)
for line in file:
if not line.startswith(" "):
a.append((line.split()))
return a
def sort(a,num):
b = sorted(a, reverse=True, key=lambda x: int(x[num]))
return b
def top5(b):
print "Source Destination Packets Bytes"
for i in b[:4]:
print i[0]+" "+i[1]+" "+i[2]+" "+i[3]
def main(option):
a = openfile(filename)
if option == "--bytes":
b = sort(a,3)
top5(b)
elif option == "--packets":
b = sort(a,2)
top5(b)
else:
print """
Not a valid switch,
--bytes to sort by bytes
--packets to sort by packets."""
main(option)
所以我的问题是如何将lambda函数复制为标准自定义排序函数?我试图弄清楚它是如何工作的。
b = sorted(a, reverse=True, key=lambda x: int(x[num]))
答案 0 :(得分:4)
如何将lambda函数复制为标准自定义排序函数?
你的意思是:
def sort(a, num):
def key(x):
return int(x[num])
return sorted(a, reverse=True, key=key)
或者也许这样:
from functools import partial
def key(num, x):
return int(x[num])
def sort(a, num):
return sorted(a, reverse=True, key=partial(key, num))
答案 1 :(得分:1)
Python提供operator.itemgetter来做这种事情:
def sort(a, num):
return sorted(a, reverse=True, key=operator.itemgetter(num))
修改
正如@NPE指出的那样,它不会将密钥转换为int
进行排序。为此,你最好坚持使用lambda。