Prev: source install of python2.7 and rpm install of cx_Oracle collision
Next: detect endianness of a binary with python
From: Thomas Jollans on 22 Jul 2010 12:56 On 07/21/2010 03:38 PM, kaklis(a)gmail.com wrote: > On Jul 21, 9:04 am, "kak...(a)gmail.com" <kak...(a)gmail.com> wrote: >> On Jul 21, 8:58 am, Stefan Behnel <stefan...(a)behnel.de> wrote: >> >> >> >>> kak...(a)gmail.com, 21.07.2010 14:36: >> >>>> From the subject of my message it's clear that i get an xml message >>>> from a socket, >> >>> Not at all, but now that you say it... >> >>>> i parse it and the result is a list like the one that >>>> follows: >>>> ID_Col >>>> 4 Server ak ip OFFLINE >> >>>> 29 Server and2 ip OFFLINE >> >>>> 5 Proxy l34e ip OFFLINE >> >>>> 6 Proxy barc ip ONLINE >> >>>> 41 Proxy proxy-2 ip ONLINE >> >>>> 53 Server server-4 ip ONLINE >> >>>> 52 Server server-3 ip ONLINE >> >>> Doesn't look like a Python list to me... >> >>>> What i want is to print this list sorted by ID_Col? >>>> Any Suggestions? >> >>> Assuming that the above is supposed to represent a list of tuples, you can >>> use the .sort() method on the list and pass operator.itemgetter(0) as 'key' >>> argument (see the sort() method and the operator module). >> >>> Stefan >> >> No it is not a Python list at all. This the way i print the parsed >> items 'like a list'. >> But i want them to be sorted. > > Well i did this: > > SortedServers = [] > > for session in sessions: > for IP in session.getElementsByTagName("ipAddress"): > for iphn in session.getElementsByTagName("hostName"): > tempTuple = session.getAttribute("id"), > session.getAttribute("type"), iphn.childNodes[0].data, > IP.childNodes[0].data, session.getAttribute("status") Please try to persuade your mail client to not mess up python code, if you could. It would make this *so* much easier to read > > SortedServers.append(tempTuple) > > Sorted = sorted(SortedServers, key=lambda id: SortedServers[0]) Anyway, let's look at that key function of yours: key=lambda id: SortedServers[0] translated to traditional function syntax: def key(id): return SortedServers[0] No matter which item sorted() examines, the key it sorts by is always the same (the first item of the WHOLE LIST). You want something more like this: def key(row): return row[0] ergo, what you want, all in all, is either of these: Sorted = sorted(SortedServers, key=(lambda row: row[0])) # option 1 SortedServers.sort(key=(lambda row: row[0])) # option 2 option 2, the in-place sort, might be faster. (and, as Stefan noted, as you probably want a numeric sort, you'll want your key to be an int) > for item in Sorted: > print item > > but the list is still unsorted and with u' in front of each item > > (u'4', u'Server', u'aika74', u'ip', u'OFFLINE') > (u'29', u'Server', u'ando', u'ip2', u'OFFLINE') > > How do i remove the u' > > Antonis
From: kaklis on 27 Jul 2010 05:58
On Jul 22, 12:56 pm, Thomas Jollans <tho...(a)jollans.com> wrote: > On 07/21/2010 03:38 PM, kak...(a)gmail.com wrote: > > > > > On Jul 21, 9:04 am, "kak...(a)gmail.com" <kak...(a)gmail.com> wrote: > >> On Jul 21, 8:58 am, Stefan Behnel <stefan...(a)behnel.de> wrote: > > >>> kak...(a)gmail.com, 21.07.2010 14:36: > > >>>> From the subject of my message it's clear that i get an xml message > >>>> from a socket, > > >>> Not at all, but now that you say it... > > >>>> i parse it and the result is a list like the one that > >>>> follows: > >>>> ID_Col > >>>> 4 Server ak ip OFFLINE > > >>>> 29 Server and2 ip OFFLINE > > >>>> 5 Proxy l34e ip OFFLINE > > >>>> 6 Proxy barc ip ONLINE > > >>>> 41 Proxy proxy-2 ip ONLINE > > >>>> 53 Server server-4 ip ONLINE > > >>>> 52 Server server-3 ip ONLINE > > >>> Doesn't look like a Python list to me... > > >>>> What i want is to print this list sorted by ID_Col? > >>>> Any Suggestions? > > >>> Assuming that the above is supposed to represent a list of tuples, you can > >>> use the .sort() method on the list and pass operator.itemgetter(0) as 'key' > >>> argument (see the sort() method and the operator module). > > >>> Stefan > > >> No it is not a Python list at all. This the way i print the parsed > >> items 'like a list'. > >> But i want them to be sorted. > > > Well i did this: > > > SortedServers = [] > > > for session in sessions: > > for IP in session.getElementsByTagName("ipAddress"): > > for iphn in session.getElementsByTagName("hostName"): > > tempTuple = session.getAttribute("id"), > > session.getAttribute("type"), iphn.childNodes[0].data, > > IP.childNodes[0].data, session.getAttribute("status") > > Please try to persuade your mail client to not mess up python code, if > you could. It would make this *so* much easier to read > > > > > SortedServers.append(tempTuple) > > > Sorted = sorted(SortedServers, key=lambda id: SortedServers[0]) > > Anyway, let's look at that key function of yours: > > key=lambda id: SortedServers[0] > > translated to traditional function syntax: > > def key(id): > return SortedServers[0] > > No matter which item sorted() examines, the key it sorts by is always > the same (the first item of the WHOLE LIST). > You want something more like this: > > def key(row): > return row[0] > > ergo, what you want, all in all, is either of these: > > Sorted = sorted(SortedServers, key=(lambda row: row[0])) # option 1 > SortedServers.sort(key=(lambda row: row[0])) # option 2 > > option 2, the in-place sort, might be faster. > > (and, as Stefan noted, as you probably want a numeric sort, you'll want > your key to be an int) > > > for item in Sorted: > > print item > > > but the list is still unsorted and with u' in front of each item > > > (u'4', u'Server', u'aika74', u'ip', u'OFFLINE') > > (u'29', u'Server', u'ando', u'ip2', u'OFFLINE') > > > How do i remove the u' > > > Antonis > > Thank you so much for your detailed response! Antonis K. |