Girish Sahani wrote: > I wrote the following code to concatenate every 2 keys of a dictionary and > their corresponding values. > e.g if i have tiDict1 = tiDict1 = {'a':[1,2],'b':[3,4,5]} i should get > tiDict2={'ab':[1,2][3,4,5]} and similarly for dicts with larger no. of > features. > Now i want to check each pair to see if they are connected...element of > this pair will be one from the first list and one from the second....e.g > for 'ab' i want to check if 1 and 3 are connected,then 1 and 4,then 1 and > 5,then 2 and 3,then 2 and 4,then 2 and 5. > The information of this connected thing is in a text file as follows: > 1,'a',2,'b' > 3,'a',5,'a' > 3,'a',6,'a' > 3,'a',7,'b' > 8,'a',7,'b' > . > . > This means 1(type 'a') and 2(type 'b') are connected,3 and 5 are connected > and so on. > I am not able to figure out how to do this.Any pointers would be helpful
Girish It seems you want the Cartesian product of every pair of lists in the dictionary, including the product of lists with themselves (but you don't say why ;-)). I'm not sure the following is exactly what you want or if it is very efficient, but maybe it will start you off. It uses a function 'xcombine' taken from a recipe in the ASPN cookbook by David Klaffenbach (2004). (It should give every possibility, which you then check in your file) Gerard ------------------------------------------------------------------------- def nkRange(n,k): m = n - k + 1 indexer = range(0, k) vector = range(1, k+1) last = range(m, n+1) yield vector while vector != last: high_value = -1 high_index = -1 for i in indexer: val = vector[i] if val > high_value and val < m + i: high_value = val high_index = i for j in range(k - high_index): vector[j+high_index] = high_value + j + 1 yield vector def kSubsets( alist, k ): n = len(alist) for vector in nkRange(n, k): ret = [] for i in vector: ret.append( alist[i-1] ) yield ret data = { 'a': [1,2], 'b': [3,4,5], 'c': [1,4,7] } pairs = list( kSubsets(data.keys(),2) ) + [ [k,k] for k in data.iterkeys() ] print pairs for s in pairs: for t in xcombine( data[s[0]], data[s[1]] ): print "%s,'%s',%s,'%s'" % ( t[0], s[0], t[1], s[1] ) ------------------------------------------------------------------------- 1,'a',1,'c' 1,'a',4,'c' 1,'a',7,'c' 2,'a',1,'c' 2,'a',4,'c' 2,'a',7,'c' 1,'a',3,'b' 1,'a',4,'b' 1,'a',5,'b' 2,'a',3,'b' 2,'a',4,'b' 2,'a',5,'b' 1,'c',3,'b' 1,'c',4,'b' 1,'c',5,'b' 4,'c',3,'b' 4,'c',4,'b' 4,'c',5,'b' 7,'c',3,'b' 7,'c',4,'b' 7,'c',5,'b' 1,'a',1,'a' 1,'a',2,'a' 2,'a',1,'a' 2,'a',2,'a' 1,'c',1,'c' 1,'c',4,'c' 1,'c',7,'c' 4,'c',1,'c' 4,'c',4,'c' 4,'c',7,'c' 7,'c',1,'c' 7,'c',4,'c' 7,'c',7,'c' 3,'b',3,'b' 3,'b',4,'b' 3,'b',5,'b' 4,'b',3,'b' 4,'b',4,'b' 4,'b',5,'b' 5,'b',3,'b' 5,'b',4,'b' 5,'b',5,'b' -- http://mail.python.org/mailman/listinfo/python-list