On Nov 18, 8:57 pm, Ping-Hsun Hsieh <hsi...@ohsu.edu> 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