Sara Briccoli
Sara Briccoli

Reputation: 186

Python - How to get Enum value by index

I have an Enum of days_of_the week in Python:

class days_of_the_week(str, Enum):
  monday = 'monday'
  tuesday = 'tuesday'
  wednesday = 'wednesday'
  thursday = 'thursday'
  friday = 'friday'
  saturday = 'saturday'
  sunday = 'sunday'

I want to access the value using the index.

I've tried:

days_of_the_week.value[index]
days_of_the_week[index].value
days_of_the_week.values()[index]

and so on... But everything I tried didn't returned me the value of enum (eg. days_of_the_week[1] >>> 'tuesday')

Is there a way?

Upvotes: 12

Views: 16810

Answers (4)

syviad
syviad

Reputation: 400

Another simple way is:

list(days_of_the_week)[index]

This will return the element from the Enum class. If you want to obtain its value:

list(days_of_the_week)[index].value

Upvotes: 6

Rahul
Rahul

Reputation: 11560

For days of the weeks, python has inbuilt calendar module but if this is just an example, this is a way.

class days_of_the_week(str, Enum):
  monday = 'monday'
  tuesday = 'tuesday'
  wednesday = 'wednesday'
  thursday = 'thursday'
  friday = 'friday'
  saturday = 'saturday'
  sunday = 'sunday'

  @property
  def index(self):
    return list(days_of_the_week).index(self)

Upvotes: 1

not_speshal
not_speshal

Reputation: 23166

IIUC, you want to do:

from enum import Enum

class days_of_the_week(Enum):
    monday = 0
    tuesday = 1
    wednesday = 2
    thursday = 3
    friday = 4
    saturday = 5
    sunday = 6

>>> days_of_the_week(1).name
'tuesday'

Upvotes: 12

Tim Roberts
Tim Roberts

Reputation: 54917

Those are simply string constants. They do not have an "index" and cannot be referred to that way.

However, you don't need to write that at all. Python provides it.

>>> import calendar
>>> list(calendar.day_name)
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
>>> calendar.day_name[5]
'Saturday'
>>> 

Upvotes: 3

Related Questions