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

1 投票
6 回答
3240 浏览
提问于 2025-04-16 08:10

我有一份包含IP地址和整数的列表,我想让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地址和整数。我只能按字母顺序排序。请问如何根据第四列的值进行正确的排序呢?这是我目前的代码:

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 个回答

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

我找不到简单干净的方法在Python中做到这一点,而不需要写长长的复杂函数和lambda表达式。

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

pip install sh

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

sh模块非常棒。

撰写回答