I use Python all the time for quick little scripting tasks. There’s nothing better to slice and dice a file, so I use Python for a lot of reporting tasks. That usually involves building some kind of data structure in my script that I’m slicing and dicing from files.
In my work, I have a LOT of units of work processing in parallel on a grid. I have GUIDs tagging each unit of work, and that GUID is the perfect key for a Map/Dictionary data structure. There are times, though, that I want to get the values of the Map and sort by some value in the data itself. The is important if I want to sort my results by elapsed time or some other interesting metric.
Here’s how you sort a Python Dictionary by some arbitrary value within the data structure:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import time work = {} # # create some sample data... # for i in range(10): key = "unit_%s" % i unitOfWork = { "id" : key, "data" : { "name" : "Turansky", "dob" : "03/28", "favoriteNumber" : int(time.time()) + i } } work[key] = unitOfWork print "The 'work' dictionary will print the objects randomly..." for i in work: print work[i] print "" print "Sprinkle some sorting magic..." # but you want to sort the objects by favoriteNumber' # get your values as a list... you want to use the list.sort() method units = work.values() # provide a lambda function that references your data structure units.sort(key = lambda obj:obj["data"]["favoriteNumber"]) print "" print "... and just like that, you have order." for u in units: print u |
Here is the output:
The 'work' dictionary will print the objects randomly... {'data': {'dob': '03/28', 'favoriteNumber': 1242069926, 'name': 'Turansky'}, 'id': 'unit_5'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069925, 'name': 'Turansky'}, 'id': 'unit_4'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069928, 'name': 'Turansky'}, 'id': 'unit_7'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069927, 'name': 'Turansky'}, 'id': 'unit_6'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069922, 'name': 'Turansky'}, 'id': 'unit_1'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069921, 'name': 'Turansky'}, 'id': 'unit_0'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069924, 'name': 'Turansky'}, 'id': 'unit_3'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069923, 'name': 'Turansky'}, 'id': 'unit_2'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069930, 'name': 'Turansky'}, 'id': 'unit_9'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069929, 'name': 'Turansky'}, 'id': 'unit_8'} Sprinkle some sorting magic... ... and just like that, you have order. {'data': {'dob': '03/28', 'favoriteNumber': 1242069921, 'name': 'Turansky'}, 'id': 'unit_0'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069922, 'name': 'Turansky'}, 'id': 'unit_1'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069923, 'name': 'Turansky'}, 'id': 'unit_2'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069924, 'name': 'Turansky'}, 'id': 'unit_3'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069925, 'name': 'Turansky'}, 'id': 'unit_4'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069926, 'name': 'Turansky'}, 'id': 'unit_5'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069927, 'name': 'Turansky'}, 'id': 'unit_6'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069928, 'name': 'Turansky'}, 'id': 'unit_7'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069929, 'name': 'Turansky'}, 'id': 'unit_8'} {'data': {'dob': '03/28', 'favoriteNumber': 1242069930, 'name': 'Turansky'}, 'id': 'unit_9'}