A question of style (finding item in list of tuples)

David Lambert dave at lambsys.com
Mon May 21 09:10:08 EDT 2012


One suggestion is to construct the dictionary first:


CHOICES = dict(
     NONE = 'No experience required',
     SAIL = 'Sailing experience, new to racing',
     RACE = 'General racing experience',
     GOOD = 'Experienced racer',
     ROCK = 'Rock star'
     )

def experience_text(self):
     try:
         return CHOICES[self]
     except:
         return "????"



On 05/21/2012 07:37 AM, Roy Smith wrote:
> I've got this code in a django app:
>
>      CHOICES = [
>          ('NONE', 'No experience required'),
>          ('SAIL', 'Sailing experience, new to racing'),
>          ('RACE', 'General racing experience'),
>          ('GOOD', 'Experienced racer'),
>          ('ROCK', 'Rock star'),
>          ]
>
>      def experience_text(self):
>          for code, text in self.CHOICES:
>              if code == self.level:
>                  return text
>          return "????"
>
> Calling experience_text("ROCK") should return "Rock star".  Annoyingly,
> django handles this for you automatically inside a form, but if you also
> need it in your application code, you have to roll your own.
>
> The above code works, but it occurs to me that I could use the much
> shorter:
>
>      def experience_text(self):
>          return dict(CHOICES).get("self.level", "???")
>
> So, the question is, purely as a matter of readability, which would you
> find easier to understand when reading some new code?  Assume the list
> of choices is short enough that the cost of building a temporary dict on
> each call is negligible.  I'm just after style and readability here.




More information about the Python-list mailing list