【问题标题】:How can I sort IP addresses and integers in Python?如何在 Python 中对 IP 地址和整数进行排序?
【发布时间】:2011-05-21 14:46:03
【问题描述】:

我有一个 IP 和整数列表,我想用 Python 来按第 4 列排序:

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

【问题讨论】:

    标签: python list sorting integer ip


    【解决方案1】:

    我无法在没有长复杂函数和 lambdas 的 py 中找到干净简单的方法,

    目前为止最简单的方法,

    pip install sh

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

    sh 模块很棒。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

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

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            【解决方案5】:

            以下是你所追求的吗?

            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
            

            【讨论】:

              【解决方案6】:
              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']]
              

              【讨论】:

                猜你喜欢
                • 2017-06-24
                • 2011-10-02
                • 2016-03-04
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-11-25
                • 2022-08-19
                • 2011-09-26
                相关资源
                最近更新 更多