On Nov 18, 8:57 pm, Ping-Hsun Hsieh <[email protected]> wrote:
> Hi,
>
> I would like to compare values in two table with same column and row names,
> but with different orders in column and row names.
> For example, table_A in a file looks like the follows:
> AA100 AA109 AA101 AA103 AA102
> BB1 2 9 2.3 1 28
> BB3 12 9 2.3 1 28
> BB9 0.5 2 2.3 1 28
> BB2 2 9 21 1 20
>
> Table_B in the other file looks like the follows:
> AA101 AA109 AA100 AA103 AA102
> BB1 2 9 2.3 2 28
> BB2 2 9 2.3 1 28
> BB9 2 9 2.3 1 28
> BB3 2 2 2 1 28
>
> Can anyone give an efficient way to make the two tables having same orders in
> column and row names so I can easily and correctly compare the values in
> positions?
>
> Thanks,
> PingHsun
Use a dictionary with a tuple of the row 'name' and column 'name' as
the key.
The following was put together in a hurry, so take with a pinch of
salt (and brandy or something :))...
t1data = """AA100 AA109 AA101 AA103 AA102
BB1 2 9 2.3 1 28
BB3 12 9 2.3 1 28
BB9 0.5 2 2.3 1 28
BB2 2 9 21 1 20"""
def create_table(what):
from itertools import imap, islice, izip, cycle, repeat
table = filter(None, imap(str.split, what.split('\n')))
table_dict = {}
for cols in islice(table, 1, None):
for row_name, col_name, col in izip(cycle(table[0]), repeat
(cols[0]), islice(cols, 1, None)):
table_dict[(row_name, col_name)] = col
return table_dict
print create_table(t1data)
hth
Jon.
--
http://mail.python.org/mailman/listinfo/python-list