我有一个列举国籍:

class Nationality:
        Poland='PL'
        Germany='DE'
        France='FR'

如何以这种或类似方式将此枚举转换为int:
position_of_enum = int(Nationality.Poland)  # here I want to get 0

我知道如果我有以下代码,我可以做到:
counter=0
for member in dir(Nationality):
    if getattr(Nationality, member) == code:
        lookFor = member
        counter += 1
return counter

但我没有,这种方式对于python来说太大了。我敢肯定,有一些简单的事情。

最佳答案

有更好(和更多的“Pythonic”)方式来做您想要的事情。

使用元组(或列表,如果需要修改的话),将保留顺序:

code_lookup = ('PL', 'DE', 'FR')
return code_lookup.index('PL')

或者按照以下方式使用字典:
code_lookup = {'PL':0, 'FR':2, 'DE':3}
return code_lookup['PL']

我认为后者是可取的,因为它更具可读性和明确性。

在您的特定情况下,namedtuple可能也很有用,尽管它可能会过大:
import collections
Nationalities = collections.namedtuple('Nationalities',
                                       ['Poland', 'France', 'Germany'])
nat = Nationalities('PL', 'FR', 'DE')
print nat.Poland
print nat.index(nat.Germany)

关于python - 在python中将枚举转换为int,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6060635/

10-09 09:22