Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Test data.
- >>> import shuffle
- >>> dicts = [{'id': i} for i in xrange(100)]
- >>> dicts
- [{'id': 0}, {'id': 1}, ..., {'id': 99}]
- >>> order = list(xrange(100))
- >>> random.shuffle(order)
- >>> order
- [54, 35, 21, 55, 5, 63, 1, 39, 41, 13, 77, 31, 62, 10, 14, 30, 15, 75, 85, 20, 59, 90, 86, 28, 80, 95, 51, 87, 69, 6, 11, 8, 19, 34, 25, 24, 12, 33, 94, 3, 50, 70, 82, 38, 76, 32, 89, 64, 17, 9, 57, 97, 16, 44, 27, 60, 43, 48, 45, 26, 91, 72, 93, 29, 61, 4, 68, 42, 74, 73, 88, 7, 84, 96, 98, 2, 46, 47, 52, 67, 79, 22, 40, 65, 36, 99, 56, 81, 92, 18, 0, 58, 49, 78, 23, 66, 53, 37, 71, 83]
- # Method 1.
- def sort_dicts1(dicts, order):
- return sorted(dicts, cmp=lambda x,y: order.index(x['id']) - order.index(y['id']))
- # Test 1.
- >>> import timeit
- >>> timeit.repeat('sort_dicts1(dicts, order)', 'from __main__ import dicts, order, sort_dicts1', number=10000)
- [10.595271110534668, 10.771971940994263, 10.737603902816772]
- # Method 2.
- def sort_dicts2(dicts, order):
- lookup = {oid: pos for pos, oid in enumerate(order)}
- return sorted(dicts, cmp=lambda x,y: lookup[x['id']] - lookup[y['id']])
- # Test 2.
- >>> import timeit
- >>> timeit.repeat('sort_dicts2(dicts, order)', 'from __main__ import dicts, order, sort_dicts2', number=10000)
- [1.6150760650634766, 1.598435878753662, 1.5800678730010986]
- # Method 3.
- def sort_dicts3(dicts, order):
- lookup = {oid: pos for pos, oid in enumerate(order)}
- return sorted(dicts, key=lambda x: lookup[x['id']])
- # Test 3.
- >>> import timeit
- >>> timeit.repeat('sort_dicts3(dicts, order)', 'from __main__ import dicts, order, sort_dicts3', number=10000)
- [0.4634428024291992, 0.44823789596557617, 0.44728708267211914]
Advertisement
Add Comment
Please, Sign In to add comment