[Python-Dev] non-mutating 'choose' to go with 'dict.popitem'?
Tim Peters
tim.one@home.com
Wed, 9 May 2001 02:48:12 -0400
[Tim]
> Given the new dict iterators in 2.2, there's an easier fast way
> that doesn't mutate the dict even under the covers:
>
> def arb(dict):
> if dict:
> return dict.iteritems().next()
> raise KeyError("arb passed an empty dict")
[Thomas Wouters]
> You probably want:
>
> arb = dict.iteritems().next
>
> so that you don't keep on returning the same key,value pair.
No, I would not want that. If "arbitrary" suffices, then by defn. *any*
element is "good enough". If it's not good enough to get the same one back
every time, then I want a stronger guarantee about what arb() returns than
the inexplicable behavior of repeated calls to dict.iteritems().next in the
presence of dict mutation. But as I've said several times before <wink>, I'm
still asking for an algorithm where arb() is actually useful (as opposed to
.popitem(), which is dead easy to explain in the presence of mutation; your
version of arb() can, e.g., return a given entry more than once, may skip
entries, and may raise StopIteration with unexamined entries remaining in the
dict).
not-inclined-to-accept-shallow-comfort-at-the-cost-of-deep-confusion-ly
y'rs - tim