def itervalues(self, index=None):
N = len(self.indices)<EOL>if index is None:<EOL><INDENT>if N <= <NUM_LIT:1>:<EOL><INDENT>return<EOL><DEDENT>elif N == <NUM_LIT:2>:<EOL><INDENT>index = <NUM_LIT:1><EOL>single = True<EOL><DEDENT>else:<EOL><INDENT>index = slice(<NUM_LIT:1>, None)<EOL>single = False<EOL><DEDENT><DEDENT>else:<EOL><INDENT>index, single = convert_key_to_index(force_list(self.indices.keys()), index)<EOL><DEDENT>multi = not single<EOL>for key in self:<EOL><INDENT>item = MI_get_item(self, key)<EOL>value = mget_list(item, index)<EOL>if multi:<EOL><INDENT>value = tuple(value)  <EOL><DEDENT>yield value<EOL><DEDENT>
Iterate through values in the ``index`` (defaults to all indices
except the first index).

When ``index is None``, yielded values depend on the length of indices (``N``):

    * if N <= 1: return
    * if N == 2: yield values in the 2nd index
    * if N > 2: yield values in all indices except the first index
      (each value is a list of ``N-1`` elements)