appropriate data structure for sorting a multi dimensional array in python?

data-structures, python

Solution

You can pass an anonymous function as the key to `sorted`. This uses the third member of the multi-dimensional dict as the key:

>>> d = {'a': [1, 4, 7], 'b': [2, 3, 9], 'c': [3, 2, 8]}
>>> for key in sorted(d, key=lambda x: d[x][2]):
...    print key, d[key]
a [1, 4, 7]
c [3, 2, 8]
b [2, 3, 9]

For descending order, use `reverse=True`. To limit the results, add `[:N]`:

sorted(d, key=lambda x: d[x][2], reverse=True)[:2]

# b [2, 3, 9]
# c [3, 2, 8]

More about `sorted` and sorting in Python.

Problem

I have three numeric values (weight, count, contribution) for various strings (words) that i would like to organise into one multidimensional array, and then sort. To do this, I made lists within a dictionary, where the numeric values are in the list and the string is the key: ``` print_dictionary[word] = [weight,count,contribution] ``` How can I sort, first in ascending order and then in descending order, by 'contribution' (the third value in the list), and show the first 10 items of the sorted list. How can I do this? For example, for the following print_dictionary: ``` print_dictionary[sam] = [2,7,1] print_dictionary[sun] = [4,1,3] print_dictionary[dog] = [1,3,2] ``` I want to them be able to sort contribution in ascending order: ``` Word: Weight: Count: Contribution: sam 2 7 1 dog 1 3 2 sun 4 1 3 ``` I don't see how itemegetter can be used for this: ``` sorted(print_dictionary, key=itemgetter(2)) ```

Original source