如何使用自定义类键在字典上的python中执行自定义排序?

时间:2014-11-25 15:58:57

标签: python sorting dictionary python-2.6

我需要对pysphere's VIServer.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(不要问为什么:()

1 个答案:

答案 0 :(得分: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)