gpt4 book ai didi

python - 将对象的属性转换为已排序的元组列表的首选技术是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:57 24 4
gpt4 key购买 nike

我正在使用一个开源库,他们定义了一个这样的类:

class Provider(object):
""" Defines for each of the supported providers """
DUMMY = 0
EC2 = 1
EC2_EU = 2
RACKSPACE = 3
SLICEHOST = 4
GOGRID = 5
VPSNET = 6
LINODE = 7
VCLOUD = 8
RIMUHOSTING = 9

我需要获取属性(DUMMY、EC2 等)并将它们转换为经过排序的元组列表,如下所示:

[(0, 'DUMMY'), (1, 'EC2'), ...]

我想根据属性本身的名称进行排序。我想出了一些方法来解决这个问题,包括以下似乎是一种低效的处理方法:

import operator
from libcloud.types import Provider

PROVIDER_CHOICES = [(v,k) for k, v in vars(Provider).items()
if not k.startswith('__')]
PROVIDER_CHOICES = sorted(PROVIDER_CHOICES, key=operator.itemgetter(1))

它有效,但看起来不够优雅,而且可能有更好的方法。我还看到我通过执行 if not k.startswith('__') 构建列表的方式存在缺陷 - 主要是如果开源库向 Provider 类添加方法怎么办?

只是寻找一些意见和其他可能对此更有效的技术。

最佳答案

如果你正在寻找整数类型的类变量,你可以这样做:

import inspect
PROVIDER_CHOICES = inspect.getmembers(Foo, lambda x: isinstance(x, int))

查看 inspect模块以获取更多信息。


顺便说一句:您可以在最后一行使用 PROVIDER_CHOICES.sort(key=...),它会进行就地排序。

编辑:getmembers 返回文档中所述的排序列表,因此不需要 sorted(感谢 J.F. Sebastian)

关于python - 将对象的属性转换为已排序的元组列表的首选技术是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1815693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com