<br><br><div><span class="gmail_quote">On 9/6/07, <b class="gmail_sendername">Noam Raphael</b> &lt;<a href="mailto:noamraph@gmail.com">noamraph@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
(Sorry, it turns out that I posted this reply only to Nick and not to<br>the list, so I post it again.)<br><br>On 9/4/07, Nick Coghlan &lt;<a href="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</a>&gt; wrote:<br>&gt; Containment and iteration really do need to be kept consistent and
<br>&gt; having the value matter when checking for dictionary containment would<br>&gt; be outright bizarre. Put the two together and it makes sense for<br>&gt; dictionary iteration and containment tests to both be based on keys.
<br>&gt;<br>I absolutely agree that containment and iteration should be kept consistent.<br><br>I suggest (again, ignoring backwards compatibility completely), that<br>&quot;in&quot; would behave according to the iteration, that is, check if the
<br>tuple (key, value) is in dict.items(). If you prefer code:<br><br>class DreamDict(dict):<br>&nbsp;&nbsp; def __iter__(self):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return self.iteritems()<br>&nbsp;&nbsp; def __contains__(self, (key, value)):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myvalue = self[key]
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; except KeyError:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return False<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return value == myvalue<br><br>Indeed, the suggested &quot;in&quot; operator is not very useful, so you&#39;ll<br>usually use has_key. But I actually think that &quot;
d.has_key(k)&quot; is<br>clearer than &quot;k in d&quot; - There&#39;s no &quot;syntactic&quot; reason why &quot;k in d&quot;<br>should mean &quot;k in d.keys()&quot; and not &quot;k in d.values()&quot;.*</blockquote><div>
<br>None of what you&#39;re saying is new. It&#39;s all been said back when iteration and containment testing were added to the dict type. The choice was explicitly made for the useful containment test, and the conforming iteration behaviour. The iteration is not actually less useful, it&#39;s just different. The net result of &#39;more useful + just as useful&#39; is &#39;more useful&#39;. I don&#39;t believe the actual experience in the three major releases since it was added, have convinced anyone that it&#39;s a bad idea (in fact, I had slight misgivings back then, but none what so ever now.) The mapping types simply don&#39;t act as containers of (key, value) pairs.
<br></div></div><br>-- <br>Thomas Wouters &lt;<a href="mailto:thomas@python.org">thomas@python.org</a>&gt;<br><br>Hi! I&#39;m a .signature virus! copy me into your .signature file to help me spread!