code: def make_choices(*args):
      
      if not args:
          return tuple()
      if isinstance(args[0], (list, tuple)):
          return make_choices(*tuple(args[0]))
      elif isinstance(args[0], collections.Mapping):
          return tuple((k, unicode(v)) for (k, v) in args[0].iteritems())
      elif all(isinstance(arg, (int, float, Decimal, basestring)) for arg in args):
          return tuple((k, unicode(k)) for k in args)
docs: Convert a 1-D sequence into a 2-D sequence of tuples for use in a Django field choices attribute
  
      >>> make_choices(range(3))
      ((0, u'0'), (1, u'1'), (2, u'2'))
      >>> make_choices(dict(enumerate('abcd')))
      ((0, u'a'), (1, u'b'), (2, u'c'), (3, u'd'))
      >>> make_choices('hello')
      (('hello', u'hello'),)
      >>> make_choices('hello', 'world') == make_choices(['hello', 'world']) == (('hello', u'hello'), ('world', u'world'))
      True