【问题标题】:How to perform custom sort in python on dictionary with custom class keys?如何在 python 中使用自定义类键对字典执行自定义排序?
【发布时间】:2014-11-25 15:58:56
【问题描述】:

我需要对pysphere'sVIServer.get_datastore 返回的字典进行排序。它应该按我们可以获得的数据存储上的可用空间进行排序:

from pysphere import VIServer, VIProperty
if __name__ == "__main__":
    server = VIServer()
    print "Connecting to vSphere..."
    server.connect(VSPHERE_IP, VSPHERE_USER, VSPHERE_PASS)
    datastores = server.get_datastores()
    for ds, name in datastores.iteritems():
        props = VIProperty(server, ds)
        freeSpace = props.summary.freeSpace

我知道我可以使用sorted(iterable[, cmp[, key[, reverse]]]) 并创建一个自定义排序函数,但我不知道该函数的参数是哪种类型。

我不能使用OrderedDict,因为我绑定到python 2.6(不要问为什么:()

【问题讨论】:

    标签: python sorting dictionary python-2.6


    【解决方案1】:

    只需在您的关键函数中查找可用空间:

    server = VIServer()
    server.connect(VSPHERE_IP, VSPHERE_USER, VSPHERE_PASS)
    datastores = server.get_datastores()
    
    ds_keys = sorted(datastores,
                     key=lambda ds: VIProperty(server, ds).summary.freeSpace
                     reverse=True)
    

    这会生成来自datastores 的排序列表;您可以使用它以特定顺序进行迭代。我假设您希望首先列出可用空间最多的数据存储。

    您也可以获得排序的键值对,将ds 分别替换为itemitem[0]

    ds_items = sorted(datastores.items(),
                      key=lambda item: VIProperty(server, item[0]).summary.freeSpace
                      reverse=True)
    

    【讨论】:

    • 谢谢,这个版本有效。你能解释一下我应该把这个项目放在哪里来获取键值对吗?
    • 啊...必须添加.items()iteritems())。现在完美了:)谢谢。
    • @Patryk:在这里使用dict.iteritems() 没什么意义,因为sorted() 无论如何都会将这些项目放入列表中。
    猜你喜欢
    • 2012-08-15
    • 1970-01-01
    • 2016-10-15
    • 2017-08-19
    • 2015-11-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多