On Dec 10, 2:11 pm, Stargaming <[EMAIL PROTECTED]> wrote: > On Mon, 10 Dec 2007 16:10:16 +0200, Nikos Vergas wrote: > > [snip] > > >> Problem: In the dynamic language of your choice, write a short program > >> that will: > >> 1. define a list of the following user ids 42346, 77290, 729 (you can > >> hardcode these, but it should > >> still work with more or less ids) > >> 2. retrieve an xml document related to each user at this url "http:// > >> api.etsy.com/feeds/xml_user_details.php?id=" > >> 3. retrieve the data contained in the city element from each xml > >> document > >> 4. keep a running total of how many users are found in each city 5. > >> display the total count of users living in each city > [snip] > > > i wanted to make it a one liner, but i had to import modules :( > > > import sys, xml, urllib > > > dummy = [sys.stdout.write(city + ': ' + str(num) + '\n') for city, num > > in set([[(a, o.count(a)) for a in p] for o, p in [2*tuple([[city for > > city in > > ((xml.dom.minidom.parseString(urllib.urlopen('http://api.etsy.com/feeds/ > > xml_user_details.php?id=' > > > + str(id)).read()).getElementsByTagName('city')[0].childNodes + [(lambda > > t: (setattr(t, 'data', 'no city'), > > t))(xml.dom.minidom.Text())[1]])[0].data.lower().replace(' ', ' ') for > > id in [71234, 71234, 71234, 71234, 71234, 71234, 42792])]])]][0])] > > I suggest `__import__` in such cases. > > Even though I do not qualify for the job, I came up with this (<wink>) > code (modified list values for demonstration, mixed together from > previous post and original task): > > print '\n'.join('%s: %d'%(x,len(list(y))) for x,y in __import__ > ('itertools').groupby(sorted(__import__('xml').dom.minidom.parse > (__import__('urllib').urlopen('http://api.etsy.com/feeds/ > xml_user_details.php?id=%d'%i)).getElementsByTagName('city') > [0].lastChild.data.title() for i in (71234, 729, 42346, 77290, 729, > 729)))) > > I still find this rather readable, though, and there is no bad side- > effect magic! :-) > > Output should be: > > | Chicago: 3 > | Fort Lauderdale: 1 > | Jersey City And South Florida: 1 > | New York: 1
Alas, it's not: AttributeError: 'module' object has no attribute 'dom' Here's a working version, optimized for char length (one line, 241 chars): import urllib as U,elementtree.ElementTree as E;c=[E.parse(U.urlopen('http://api.etsy.com/feeds/xml_user_details.php? id=%d'%u)).findtext('//city')for u in 71234,729,42346,77290,729,729];print'\n'.join('%s: %s'% (i,c.count(i))for i in set(c)) George -- http://mail.python.org/mailman/listinfo/python-list