我有一个列举国籍:
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/