【问题标题】:sorting a list of class instances by attribut ip按属性 ip 对类实例列表进行排序
【发布时间】:2012-10-12 07:18:21
【问题描述】:

我有点失落。我想对一个列表进行排序,其格式为:

[instance_of_myClass, instance_of_myClass, instance_of_myClass...]

myClass 中的init 看起来像这样:

def __init__(self):
   self.ip = ""
   self.hostname = ""
   self.further_informtion

我希望它按它的 IP 地址排序,我发现它是

sorted(list_of_ips, key=lambda ip: long(''.join(["%02X" % long(i) for i in ip.split('.')]), 16))

来自How to sort IP addresses stored in dictionary in Python?

不过,我在转移它时遇到了麻烦。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: python list sorting ip


    【解决方案1】:

    根据文档:

    key 指定一个参数的函数,用于从每个列表元素中提取比较键。默认值为无。

    因此,您作为键提供的上述 lambda 函数的实际参数是“myClass”的实例,因此为了按 ip 对类实例进行排序,您应该这样写:

    key=lambda my_instace: long(''.join(["%02X" % long(i) for i in my_instance.ip.split('.')]), 16))
    

    【讨论】:

      【解决方案2】:
      [instance_of_myClass, instance_of_myClass, instance_of_myClass...].sort(lambda a, b: cmp(a.ip, b.ip))
      

      【讨论】:

      • 这只有在cmp 以合理的方式为ip 对象定义时才有效——基于上面的字符串修改,我怀疑是这种情况......另外,我相信这个比较不推荐使用用法,而支持 key 在另一个答案中使用。
      猜你喜欢
      • 1970-01-01
      • 2021-03-29
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多