Pythonic infinite for loop?

Peter Otten __peter__ at web.de
Fri Apr 15 10:25:08 CEST 2011


Chris Angelico wrote:

> Apologies for interrupting the vital off-topic discussion, but I have
> a real Python question to ask.
> 
> I'm doing something that needs to scan a dictionary for elements that
> have a particular beginning and a numeric tail, and turn them into a
> single list with some processing. I have a function parse_kwdlist()
> which takes a string (the dictionary's value) and returns the content
> I want out of it, so I'm wondering what the most efficient and
> Pythonic way to do this is.
> 
> My first draft looks something like this. The input dictionary is
> called dct, the output list is lst.
> 
> lst=[]
> for i in xrange(1,10000000): # arbitrary top, don't like this
>   try:
>     lst.append(parse_kwdlist(dct["Keyword%d"%i]))
>   except KeyError:
>     break
> 
> I'm wondering two things. One, is there a way to make an xrange object
> and leave the top off? (Sounds like I'm risking the numbers
> evaporating or something.) And two, can the entire thing be turned
> into a list comprehension or something? Generally any construct with a
> for loop that appends to a list is begging to become a list comp, but
> I can't see how to do that when the input comes from a dictionary.
> 
> In the words of Adam Savage: "Am I about to feel really, really stupid?"
> 
> Thanks in advance for help... even if it is just "hey you idiot, you
> forgot about X"!

The initial data structure seems less than ideal. You might be able to 
replace it with a dictionary like

{"Keyword": [value_for_keyword_1, value_for_keyword_2, ...]}

if you try hard enough.



More information about the Python-list mailing list