[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

i tried with testing1.sort(key=lambda x: x[0]) but only first element of tuple are grouped then i expect to sort with custom function if difference between first element of tuple and another first element of tuple is less than some value and do for second element too, goal to segmentation of black words from photo from PIL import Image from functools import partial ma = Image.open("roster.png") color1 = ma.load() print ma.size print color1[1,1] color1 = ma.load() print ma.size print color1[1,1] colortolocation = {} def addtogroupkey(keyandmemory, key1, memorycontent): k = key1 if k in keyandmemory: keyandmemory[k].append(memorycontent) else: keyandmemory[k] = [memorycontent] return keyandmemory for ii in range(0, ma.size[0]): for jj in range(0, ma.size[1]): colortolocation = addtogroupkey(colortolocation, color1[ii,jj], (ii,jj)) def isneighborlocation(lo1, lo2): if abs(lo1[0] - lo2[0]) < 7 and abs(lo1[1] - lo2[1]) < 7: return 1 elif abs(lo1[0] - lo2[0]) == 1 and lo1[1] == lo2[1]: return 1 elif abs(lo1[1] - lo2[1]) == 1 and lo1[0] == lo2[0]: return 1 else: return 0 for eachcolor in colortolocation: testing1 = list(colortolocation[eachcolor]) #testing1.sort(key=lambda x: x[1]) #custom_list_indices = {v: i for i, v in enumerate(custom_list)} testing1.sort(key=lambda x: x[0]-x[1]) locations = testing1 locationsgroup = {} continueconnect = 0 for ii in range(0,len(locations)-1): if isneighborlocation(locations[ii], locations[ii+1]) == 1: if continueconnect == 0: keyone = len(locationsgroup)+1 if keyone in locationsgroup: if locations[ii] not in locationsgroup[keyone]: locationsgroup = addtogroupkey(locationsgroup, keyone, locations[ii]) if locations[ii+1] not in locationsgroup[keyone]: locationsgroup = addtogroupkey(locationsgroup, keyone, locations[ii+1]) else: locationsgroup = addtogroupkey(locationsgroup, keyone, locations[ii]) locationsgroup = addtogroupkey(locationsgroup, keyone, locations[ii+1]) continueconnect = 1 else: if len(locationsgroup) > 0: if locations[ii] not in locationsgroup[len(locationsgroup)]: locationsgroup = addtogroupkey(locationsgroup, len(locationsgroup)+1, locations[ii]) else: locationsgroup = addtogroupkey(locationsgroup, len(locationsgroup)+1, locations[ii]) continueconnect = 0 colortolocation[eachcolor] = locationsgroup for kk in colortolocation[(0,0,0)]: if len(colortolocation[(0,0,0)][kk]) > 7: print kk print colortolocation[(0,0,0)][kk] On Wednesday, August 2, 2017 at 3:50:52 AM UTC+8, Ho Yeung Lee wrote: > def isneighborlocation(lo1, lo2): > if abs(lo1[0] - lo2[0]) < 7 and abs(lo1[1] - lo2[1]) < 7: > return 1 > elif abs(lo1[0] - lo2[0]) == 1 and lo1[1] == lo2[1]: > return 1 > elif abs(lo1[1] - lo2[1]) == 1 and lo1[0] == lo2[0]: > return 1 > else: > return 0 > > > sorted(testing1, key=lambda x: (isneighborlocation.get(x[0]), x[1])) > > return something like > [(1,2),(3,3),(2,5)]

- Prev by Date:
**how to sort a list of tuples with custom function** - Next by Date:
**how to sort a list of tuples with custom function** - Previous by thread:
**how to sort a list of tuples with custom function** - Next by thread:
**how to sort a list of tuples with custom function** - Index(es):