ranjan das wrote:
This is a small example i created
from operator import itemgetter
temp={'4':(2,3), '2':(5,8)}
print temp.items()
new_temp=sorted(temp.items(), key=itemgetter(1)
print new_temp
Another syntax error. Please ensure that you test your code before
posting. In this case, it's easy to fix: you're missing a closing
bracket in the call to sorted().
I want to sort the dictionary by the value in the first element of the tuple
((2,3) and (5,8)) and then the second value.
That would be the ordinary sort order of tuples.
How do i do it? by setting key=itemgetter(1), it seems to sort the dict by
the first value of the tuple. But I am not able to do it for the second
value.
You can't sort *dicts*, because they are unordered. However, you extract
the key:value items from the dict into a list, which gives you a list of
tuples:
>>> from operator import itemgetter
>>> temp={'4':(2,3), '2':(5,8)}
>>> print temp.items()
[('2', (5, 8)), ('4', (2, 3))]
You want to ignore the key part (the first item in the *outer* tuples,
namely '2' and '4'), and just sort by the value part (the second item of
the outer tuples, namely (2, 3) and (5, 8) -- note that these are
themselves also tuples.
The way to sort them is using itemgetter(1), exactly as you tried:
>>> new_temp=sorted(temp.items(), key=itemgetter(1))
>>> print new_temp
[('4', (2, 3)), ('2', (5, 8))]
What makes you think that it did not work correctly? Here is a better
example, showing that it works fine:
>>> temp = {'a':(2,3), 'b':(5,8), 'c':(5,1), 'd':(2,1)}
>>> temp.items()
[('a', (2, 3)), ('c', (5, 1)), ('b', (5, 8)), ('d', (2, 1))]
>>> sorted(temp.items(), key=itemgetter(1))
[('d', (2, 1)), ('a', (2, 3)), ('c', (5, 1)), ('b', (5, 8))]
--
Steven
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor