Sorting a list created from a parsed xml message

Discussion in 'Python' started by kaklis@gmail.com, Jul 21, 2010.

  1. Guest

    Hi pythonistas,
    From the subject of my message it's clear that i get an xml message
    from a socket, 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


    What i want is to print this list sorted by ID_Col?
    Any Suggestions?

    Antonis K.
    , Jul 21, 2010
    #1
    1. Advertising

  2. , 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
    Stefan Behnel, Jul 21, 2010
    #2
    1. Advertising

  3. Guest

    On Jul 21, 8:58 am, Stefan Behnel <> wrote:
    > , 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.
    , Jul 21, 2010
    #3
  4. Guest

    On Jul 21, 9:04 am, "" <> wrote:
    > On Jul 21, 8:58 am, Stefan Behnel <> wrote:
    >
    >
    >
    > > , 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")

    SortedServers.append(tempTuple)

    Sorted = sorted(SortedServers, key=lambda id: SortedServers[0])
    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
    , Jul 21, 2010
    #4
  5. , 21.07.2010 15:38:
    > On Jul 21, 9:04 am, ""<> wrote:
    >> On Jul 21, 8:58 am, Stefan Behnel<> wrote:
    >>
    >>
    >>
    >>> , 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")
    >
    > SortedServers.append(tempTuple)
    >
    > Sorted = sorted(SortedServers, key=lambda id: SortedServers[0])
    > 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')


    It seems you want to sort the list numerically. In that case, use
    int(SortedServers[0]) as the key. Sorting by string values will sort the
    list lexicographically.


    > How do i remove the u'


    You should read the Python tutorial, specifically the sections about
    strings. Then, read the sections on lists and sequences.

    In short: Don't care about the "u'" prefix, that's just fine.

    Stefan
    Stefan Behnel, Jul 21, 2010
    #5
  6. On 07/21/2010 03:38 PM, wrote:
    > On Jul 21, 9:04 am, "" <> wrote:
    >> On Jul 21, 8:58 am, Stefan Behnel <> wrote:
    >>
    >>
    >>
    >>> , 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
    Thomas Jollans, Jul 22, 2010
    #6
  7. Guest

    On Jul 22, 12:56 pm, Thomas Jollans <> wrote:
    > On 07/21/2010 03:38 PM, wrote:
    >
    >
    >
    > > On Jul 21, 9:04 am, "" <> wrote:
    > >> On Jul 21, 8:58 am, Stefan Behnel <> wrote:

    >
    > >>> , 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.
    , Jul 27, 2010
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Katrin Tomanek

    Java and huge XML file to be parsed

    Katrin Tomanek, Jun 17, 2004, in forum: Java
    Replies:
    47
    Views:
    1,677
    Dale King
    Apr 15, 2006
  2. YuliaG
    Replies:
    2
    Views:
    444
    Arnaud Berger
    Apr 4, 2005
  3. Failure
    Replies:
    1
    Views:
    1,102
    Failure
    Sep 7, 2003
  4. Jim Williams
    Replies:
    2
    Views:
    534
    Keith M. Corbett
    Aug 8, 2004
  5. Replies:
    0
    Views:
    374
Loading...

Share This Page