title: Slicing a dictionary
body: <p>I have a dictionary, and would like to pass a part of it to a function, that part being given by a list (or tuple) of keys. Like so:</p>
  <pre><code># the dictionary
  d = {1:2, 3:4, 5:6, 7:8}
  
  # the subset of keys I'm interested in
  l = (1,5)
  </code></pre>
  <p>Now, ideally I'd like to be able to do this:</p>
  <pre><code>&gt;&gt;&gt; d[l]
  {1:2, 5:6}
  </code></pre>
  <p>... but that's not working, since it will look for a key matching the tuple <code>(1,5)</code>, the same as <code>d[1,5]</code>.</p>
  <p><code>d{1,5}</code> isn't even valid Python (as far as I can tell ...), though it might be handy: The curly braces suggest an unordered set or a dictionary, so returning a dictionary containing the specified keys would look very plausible to me.</p>
  <p><code>d[{1,5}]</code> would also make sense (&quot;here's a set of keys, give me the matching items&quot;), and <code>{1, 5}</code> is an unhashable set, so there can't be a key that matches it -- but of course it throws an error, too.</p>
  <p>I know I can do this:</p>
  <pre><code>&gt;&gt;&gt; dict([(key, value) for key,value in d.iteritems() if key in l])
  {1: 2, 5: 6}
  </code></pre>
  <p>or this:</p>
  <pre><code>&gt;&gt;&gt; dict([(key, d[key]) for key in l])
  </code></pre>
  <p>which is more compact
  ... but I feel there must be a &quot;better&quot; way of doing this. Am I missing a more elegant solution?</p>
  <p>(I'm using Python 2.7)</p>