如何在Python中对IP地址和整数进行排序?

时间:2010-12-07 14:01:39

标签: python list sorting integer ip

我有一个IP和整数列表,我想在第4列中按python排序:

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

6 个答案:

答案 0 :(得分:6)

以下是您的目标吗?

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

答案 1 :(得分:2)

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']]

答案 2 :(得分:1)

你的ip整数是存储在字符串中的吗?第四列是字符串的一部分?但是你可以做类似

的事情
l.sort(key=lambda x:x.split()[3], reverse=True)

或者如果你想要更多的控制,你可以定义一个带2个字符串的函数并确定它是最高的,然后传递该func以通过cmp参数排序

答案 3 :(得分:1)

lines = open("file.txt", "r").readlines()
lines=[x.split() for x in lines]
lines.sort(key=lambda l: int(l[3]), reverse=True)

答案 4 :(得分:1)

我认为你不需要改变你的台词。您应该能够使用

简单地对行进行排序
lines.sort( lambda x, y: cmp( int(x[3]), int(y[3]) ) )

假设您的第四列总是有一个整数值。

讨论Python序列以及如何操作它们的良好链接:Effbot

答案 5 :(得分:0)

我无法找到干净简单的方法在py w / o长复杂函数和lambdas中执行此操作,

到目前为止最简单的方法,

pip install sh

from sh import sort
sort('-nr', '/tmp/file1', '-o', '/tmp/file1')

sh模块很棒。