def __init__(self, *args, **kw):
<EOL>self.indices = None  <EOL>super(MIMapping, self).__init__()<EOL>_MI_init(self, *args, **kw)<EOL>
Init dictionary with items and index names::

    (items, names, **kw)
    (dict, names, **kw)
    (MIDict, names, **kw)

``names`` and ``kw`` are optional.

``names`` must all be str or unicode type.
When ``names`` not present, index names default to: 'index_0', 'index_1', etc.
When keyword arguments present, only two indices allowed (like a normal dict)


Examples::

    index_names = ['uid', 'name', 'ip']
    rows_of_data = [[1, 'jack', '192.1'],
                    [2, 'tony', '192.2']]

    user = MIDict(rows_of_data, index_names)

    user = MIDict(rows_of_data)
    <==> user = MIDict(rows_of_data, ['index_0', 'index_1', 'index_2'])


Construct from normal dict::

    normal_dict = {'jack':1, 'tony':2}
    user = MIDict(normal_dict.items(), ['name', 'uid'])
    # user -> MIDict([['tony', 2], ['jack', 1]], ['name', 'uid'])