def DEFAULT_RENAMER(L, Names=None):
if isinstance(L,dict):<EOL><INDENT>Names = list(L.keys())<EOL>LL = list(L.values())<EOL><DEDENT>else:<EOL><INDENT>if Names == None:<EOL><INDENT>Names = list(range(len(L)))<EOL><DEDENT>else:<EOL><INDENT>assert len(Names) == len(L)<EOL><DEDENT>LL = L<EOL><DEDENT>commons = Commons([l.dtype.names for l in LL])<EOL>D = {}<EOL>for (i,l) in zip(Names, LL):<EOL><INDENT>d = {}<EOL>for c in commons:<EOL><INDENT>if c in l.dtype.names:<EOL><INDENT>d[c] = c + '<STR_LIT:_>' + str(i)<EOL><DEDENT><DEDENT>if d:<EOL><INDENT>D[i] = d<EOL><DEDENT><DEDENT>return D<EOL>
Renames overlapping column names of numpy ndarrays with structured dtypes

Rename the columns by using a simple convention:

*   If `L` is a list, it will append the number in the list to the key 
    associated with the array.

*   If `L` is a dictionary, the algorithm will append the string 
    representation of the key associated with an array to the overlapping 
    columns from that array.

Default renamer function used by :func:`tabular.spreadsheet.join`

**Parameters**

        **L** :  list or dictionary

                Numpy recarrays with columns to be renamed.

**Returns**

        **D** :  dictionary of dictionaries

                Dictionary mapping each input numpy recarray to a 
                dictionary mapping each original column name to its new 
                name following the convention above.