Dinesh B Vadhia wrote:
Have a large number (> 1bn) of integer co-ordinates (i, j). The i are ordered and the j unordered. I want to create (j, i) with j ordered and i unordered ie. from: ...
6940, 22886
6940, 38277
6940, 43788
...
to:
...
38277, 567
38277, 90023
38277, 6940
...
I've tried the dictionary route and it works perfectly for small set of co-ordinate pairs but not for large sets as it hits memory capacity. Any ideas how I could do this?

Can you actually load the original (unsorted) data to memory?

If you can, the easiest way is to use list.sort (which is in-place sort) with key:

data = [...taken from somewhere...]
data.sort(key=lambda x: x[1])

if you can't load the whole thing into memory, the easiest way (without relying on external modules) might be to load it in fixed size chunks that can be loaded to memory, sort it, then write it to a temporary file. Next, load all of the files, then interleave them.

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to