title: Use a list as the key in a Python dict
body: <p>I have two lists and I need to rank their elements with the Borda positional ranking. so I made this function, but I have this error:</p>
  
  <pre><code>TypeError: unhashable type: 'list'. 
  </code></pre>
  
  <p>As indicated by other answers The problem is that I can't use a list as the key in a dict, since dict keys need to be immutable.So I used a tuple instead, but the error remains. </p>
  
  <pre><code>The files of the two lists look like this
  list1 = [([('diritti', 'S'), ('umani', 'A')]), ([('violazioni', 'S'), ('dei', 'E'), ('diritti', 'S'), ('umani', 'A')]), ([('forze', 'S'), ('di', 'E'), ('sicurezza', 'S')]), ([('violazioni', 'S'), ('dei', 'E'), ('diritti', 'S')]), ([('Nazioni', 'SP'), ('Unite', 'SP')]), ([('anni', 'S'), ('di', 'E'), ('carcere', 'S')])] 
  list2 = [([('anni', 'S'), ('di', 'E'), ('carcere', 'S')]), ([('diritti', 'S'), ('umani', 'A')]), ([('forze', 'S'), ('di', 'E'), ('sicurezza', 'S')]), ([('violazioni', 'S'), ('dei', 'E'), ('diritti', 'S'), ('umani', 'A')]), ([('violazioni', 'S'), ('dei', 'E'), ('diritti', 'S')]), ([('Nazioni', 'SP'), ('Unite', 'SP')]), ([('uso', 'S'), ('eccessivo', 'A'), ('della', 'E'), ('forza', 'S')])] 
  </code></pre>
  
  <p>I open the two files as list in this way</p>
  
  <pre><code>list1 = codecs.open('/home/list1', 'r', 'utf-8').read()
  list2 = codecs.open('/home/list2', 'r', 'utf-8').read()
  li = ast.literal_eval(list1)
  lii = ast.literal_eval(list2)
  
  def borda_sort(lists):
  ###Borda’s positional ranking combines ranked lists using information of the ordinal ranks of the elements in each list.Given lists t1, t2, t3 ... tk, for each candidate c and list ti, the score B ti (c) is the number of candidates ranked below c in ti. So The total Borda score is B(c) = ∑ B ti (c) The candidates are then sorted by descending Borda scores. Given the lists = [ ['a', 'c'], ['b', 'd', 'a'], ['b', 'a', 'c', 'd'] ], the output will be ['b', 'a', 'c', 'd']
      scores = {}
      for l in lists:
          for idx, elem in enumerate(reversed(l)):
              if not elem in scores:
                  scores[elem] = 0
              scores[elem] += idx
      return sorted(scores.keys(), key=lambda elem: scores[elem], reverse=True)
  
  lists = zip(li, lii)
  print borda_sort(lists)
  </code></pre>
  
  <p>Can someone help?</p>