title: python dict: get vs setdefault
body: <p>The following two expressions seem equivalent to me. Which one is preferable?</p>
  
  <pre><code>data = [('a', 1), ('b', 1), ('b', 2)]
  
  d1 = {}
  d2 = {}
  
  for key, val in data:
      # variant 1)
      d1[key] = d1.get(key, []) + [val]
      # variant 2)
      d2.setdefault(key, []).append(val)
  </code></pre>
  
  <p>The results are the same but which version is better or rather more pythonic?</p>
  
  <p>Personally I find version 2 harder to understand, as to me setdefault is very tricky to grasp. If I understand correctly, it looks for the value of "key" in the dictionary, if not available, enters "[]" into the dict, returns a reference to either the value or "[]" and appends "val" to that reference. While certainly smooth it is not intuitive in the least (at least to me).</p>
  
  <p>To my mind, version 1 is easier to understand (if available, get the value for "key", if not, get "[]", then join with a list made up from [val] and place the result in "key"). But while more intuitive to understand, I fear this version is less performant, with all this list creating. Another disadvantage is that "d1" occurs twice in the expression which is rather error-prone. Probably there is a better implementation using get, but presently it eludes me.</p>
  
  <p>My guess is that version 2, although more difficult to grasp for the inexperienced, is faster and therefore preferable. Opinions?</p>