Python beginner - Sorting tuples using lambda functions
<p>I'm going through the tutorial intro for Python and I'm stuck on understanding a piece of code. This is from section 4.7.5 of the tutorial.</p>

<pre><code>pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: pair[1])
pairs
</code></pre>

<p>This bit of code returns </p>

<pre><code>[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
</code></pre>

<p>So in line one, it defines pairs with a list of different tuples. I get that.
Line two is where I'm completely thrown off and I've done quite a bit of messing around with it to try to understand what's happening.</p>

<p>I've found that sort() is applying a built-in function to the variable pairs, and presumably it is sorting it per the instructions I'm giving it.</p>

<p>The sort() function requires a key, and key has to be defined using a function, hence the use of lambda. I think all of this is correct, but I may be way off here.</p>

<p>Lambda defines a new parameter, "pair" on the left side of the colon, and on the right side is the calculation to define the return value of the lambda function.</p>

<p>That's where I'm thrown off. What does "pair[1]" do? What is its affect on the "pair" on the left side of the colon? </p>

<p>What value does it return? I can't seem to get it to return any sort of value outside of coding it just like this.</p>

<p>I'm guessing that it somehow points to a specific tuple and sorts it based on repositioning that, but I'm not sure of the logic behind that. </p>

<p>Can anyone explain this for me? Thank you.</p>

<p>Sometimes when starting to work with <code>lambda</code>, it's easier to write out the function explicitly.  Your lambda function is equivalent to:</p>

<pre><code>def sort_key(pair):
    return pair[1]
</code></pre>

<p>If we want to be more verbose, we can unpack pair to make it even more obvious:</p>

<pre><code>def sort_key(pair):
    int_value, string_value = pair
    return string_value
</code></pre>

<p>Because <code>list.sort</code> orders the items based on the return value of the <code>key</code> function (if present), now we see that it is sorting the tuples by their <em>string value</em>.  Since strings sort lexicographically, <code>"four"</code> comes before <code>"one"</code> (think alphabetical order).</p>

python sorting lambda