如何在python中对具有自定义类键的字典执行自定义排序?

2024-04-27 03:42:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要对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,因为我绑定到Python2.6(不要问为什么:()


Tags: 函数namegetserver排序dspropsdatastore
1条回答
网友
1楼 · 发布于 2024-04-27 03:42:17

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

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的排序列表;您可以使用该列表按特定顺序进行迭代。我以为你想要的数据存储空间最大的列在第一位。你知道吗

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

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

相关问题 更多 >