<p><br>
On Jul 24, 2013 2:27 PM, "Peter Otten" <__<a href="mailto:peter__@web.de">peter__@web.de</a>> wrote:<br>
><br>
> Oscar Benjamin wrote:<br>
><br>
> > On Jul 24, 2013 7:25 AM, "Peter Otten" <__<a href="mailto:peter__@web.de">peter__@web.de</a>> wrote:<br>
> >><br>
> >> Ethan Furman wrote:<br>
> >><br>
> >> > So, my question boils down to:  in Python 3 how is dict.keys()<br>
> >> > different<br>
> >> > from dict?  What are the use cases?<br>
> >><br>
> >> I just grepped through /usr/lib/python3, and could not identify a single<br>
> >> line where some_object.keys() wasn't either wrapped in a list (or set,<br>
> >> sorted, max) call, or iterated over.<br>
> >><br>
> >> To me it looks like views are a solution waiting for a problem.<br>
> ><br>
> > What do you mean? Why would you want to create a temporary list just to<br>
> > iterate over it explicitly or implicitly (set, sorted, max,...)?<br>
><br>
> I mean I don't understand the necessity of views when all actual usecases<br>
> need iterators. The 2.x iterkeys()/iteritems()/itervalues() methods didn't<br>
> create lists either.</p>
<p>Oh, okay. I see what you mean.</p>
<p>><br>
> Do you have 2.x code lying around where you get a significant advantage by<br>
> picking some_dict.viewkeys() over some_dict.iterkeys()?</p>
<p>No. I don't think I've ever used viewkeys. I noticed it once, didn't see an immediate use and forgot about it but...</p>
<p>> I could construct<br>
> one<br>
><br>
> >>> d = dict(a=1, b=2, c=3)<br>
> >>> e = dict(b=4, c=5, d=6)<br>
> >>> d.viewkeys() & e.viewkeys()<br>
> set(['c', 'b'])</p>
<p>that might be useful.</p>
<p>><br>
> but have not seen it in the wild.</p>
<p>> My guess is that most non-hardcore users don't even know about viewkeys().<br>
> By the way, my favourite idiom to iterate over the keys in both Python 2 and<br>
> 3 is -- for example -- max(some_dict) rather than<br>
> max(some_dict.whateverkeys()).</p>
<p>Agreed.</p>
<p>Earlier I saw that I had list(some_dict) in some code. Not sure why but maybe because it's the same in Python 2 and 3.<br></p>
<p>Oscar</p>