Я работаю с библиотекой с открытым исходным кодом, и они определяют класс следующим образом:
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?
Просто ищу некоторые мнения и другие приемы, которые могут быть лучше для этого.