[Baypiggies] Tricky dictionary iteration problem

corey.coughlin at comcast.net corey.coughlin at comcast.net
Fri Jan 6 01:57:23 CET 2012


Hi all, 
Sorry to bug everybody, but I'm having some trouble with a somewhat tricky class I'm trying to make. I have a class that inherits from collections.OrderedDict, in an effort to create an ordered dictionary with some extra functions. Now what I'd like to do is to change the iteration so that when you iterate over it, it iterates over values instead of keys. This is turning out to be harder than I thought. First, I tried this: 

class od2(collections.OrderedDict): 
def __iter__(self): 
return iter(self.values()) 

Now the code I'm running creates a dict and tries to do a .copy on it, but I'd expect the problem to come up with most kind of dictionary access. The problem is that it goes into an infinite recursion with messages like this 

File "...", line 57, in __iter__ 
return iter(self.values()) 
File ".../python/2.7.1/linux64/lib/python2.7/_abcoll.py" line 372 in values 
return [self[key] for key in self] 

It looks like the values() function uses the iterator to generate the values. OK, so maybe I'll try this: 

class od2(collections.OrderedDict): 
def __iter__(self): 
values = [self[key] for key in self.keys()] 
return iter(values) 

that gives me messages like this: 

File "...", line 56, in __iter__ 
values = [self[key] for key in self.keys()] 
File ".../python/2.7.1/linux64/lib/python2.7/_abcoll.py" line 366 in keys 
return list(self) 

and list() uses the iterator. Gah. So I'm out of ideas here, even if I dig into OrderedDict and find some way to pull the keys out, I'll probably have to rewrite a bunch of access functions for it to still work like a dictionary. Am I just tilting at windmills, or is doing something like this actually possible? Or am I just being dense, and there's a super obvious way to do this? Thanks for any help! 

(Oh, and forgive me if there's a known fix for this, googling for anything along these lines just sent me to tons of tutorials about using the .values() function. No help there.) 

------- Corey 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/baypiggies/attachments/20120106/0cb9c28f/attachment.html>


More information about the Baypiggies mailing list