Grouping pairs - suggested tools
Peter Otten
__peter__ at web.de
Tue Sep 21 11:31:32 EDT 2010
Astley Le Jasper wrote:
> Thanks all. I was playing around with this and came up with another
> solution using dictionaries (... comfort zone ...!!)
> from operator import itemgetter
>
> def group_stuff(data):
>
> group_dic = {}
> group_id = 0
>
> for line in data:
> i = 0
> for ref in line:
> if group_dic.get(ref) is None:
> if group_dic.get(line[1-i]) is not None:
> group_id = group_dic[line[1-i]]
> else:
> group_id +=1
> group_dic[ref] = group_id
> i+=1
>
> group_list = []
> for id, group in sorted(group_dic.items(), key=itemgetter(1,0)):
> group_list.append((group, id))
>
> return group_list
>
> if __name__ == '__main__':
> data = [('a','b'),('a','c'),('a','d'),('b','c'),('b','d'),
> ('c','d'),('e','f'),('e','g'),('f','g'),('h','i')]
> grouped = group_stuff(data)
> print grouped
> Output: [(1, 'a'), (1, 'b'), (1, 'c'), (1, 'd'), (2, 'e'), (2, 'f'),
> (2, 'g'), (3, 'h'), (3, 'i')]
I think you have the same bug as Alf's code, you never merge existing
groups. Have you tried Arnaud's counterexample?
By the way, are ('a', 'b') and ('b', 'a') to be considered equivalent for
your problem?
Peter
More information about the Python-list
mailing list