From the documentation: "The sort() method takes an optional argument specifying a comparison function of 2 arguments (list items) which should return -1, 0, or 1 depending on whether the 1st argument is considered smaller than, equal to, or larger than the 2nd argument"
So you want something like
lst = d.items()
lst.sort(lambda a,b: b[1]-a[1])
which returns
[('c', 3), ('a', 2), ('b', 1)]
Edit: the lambda function is a comparator. For an ordinary, ascending sort, it should return a value <0 if a<b, ==0 if a==b, and >0 if a>b. The easy way to get this is a-b.
We want to sort in reversed order - so we reverse the sign of the comparator, returning a value <0 if a>b (etc)... and the easy way to get this is b-a.
We are sorting on the second member of each item, so the comparator becomes b[1]-a[1], as above.