如何在Python中对IP地址和整数进行排序?
我有,我想对Python的第4列进行排序IP和整数列表:如何在Python中对IP地址和整数进行排序?
172.2.174.86 172.2.15.65 69694 42272874
172.2.200.100 172.2.15.20 14 4326
10.1.162.12 172.2.15.162 4741 170676
172.2.174.86 172.2.15.64 46021 33956341
10.1.167.237 172.2.15.69 921 133574
问题是Python似乎无法处理IP地址和整数在同一个列表中。我只能按字母顺序排序。我怎样做基于第4列下面的值正确的排序是我所:
lines = open("file.txt", "r").readlines()
lines=[x.split() for x in lines]
for i in lines:
i.reverse()
lines.sort(cmp, reverse=True)
for i in lines:
print i
import csv
with open("file.txt") as f:
data = list(csv.reader(f, delimiter=' '))
def intkey(row):
return int(row[3])
data.sort(key=intkey, reverse=True)
print data
结果:
[['172.2.174.86', '172.2.15.65', '69694', '42272874'],
['172.2.174.86', '172.2.15.64', '46021', '33956341'],
['10.1.162.12', '172.2.15.162', '4741', '170676'],
['10.1.167.237', '172.2.15.69', '921', '133574'],
['172.2.200.100', '172.2.15.20', '14', '4326']]
是你后什么以下?
lines = open("file.txt", "r").readlines()
lines = [x.split() for x in lines]
lines.sort(cmp, key=lambda x:int(x[3]))
for i in lines:
print i
你的ip整数存储在字符串中,对吗?第四列是字符串的一部分?但是你可以像
l.sort(key=lambda x:x.split()[3], reverse=True)
的东西,或者如果你想要更多的控制,你可以定义一个函数,需要2串并确定至极是最高的,然后传递FUNC通过CMP参数进行排序
lines = open("file.txt", "r").readlines()
lines=[x.split() for x in lines]
lines.sort(key=lambda l: int(l[3]), reverse=True)
是的,做了诡计。非常感谢! – briandowd 2010-12-07 14:17:35
我不认为你需要扭转你的线。你应该能够线条使用
lines.sort(lambda x, y: cmp(int(x[3]), int(y[3])))
假设你总是在你的第四列的积分值,简单地排序。
很好的链接讨论Python的序列,以及如何操纵它们:Effbot
我无法找到干净简单的方法PY做到这一点W¯¯迄今为止,
/O长期复杂的功能和lambda表达式,最简单的方法
PIP安装SH
from sh import sort
sort('-nr', '/tmp/file1', '-o', '/tmp/file1')
SH模块是梦想家我知道了。
非常感谢,这样做!正是我所需要的 – briandowd 2010-12-07 14:17:07
不客气。 – NPE 2010-12-07 14:17:38