Hi All,

Yes, I want to sort the map by order of insertion. Thank for all the 
suggestions.

I know what I need to do now.

Cindy

From: Sharon Lucas [mailto:luc...@us.ibm.com]
Sent: October-26-11 11:37 AM
To: Joseph J Veilleux
Cc: Cindy Zhu; staf-users@lists.sourceforge.net
Subject: Re: [staf-users] Iterating a dictionary in a STAX job

Right, I should have shown it as follows:

    <script>testsWin = {'Harmony':0,'DeclinePlus':0, 'Harmony1':0, 
'RTA':0}</script>

    <iterate var="test" in="sorted(testsWin.iterkeys())">
      <log message="1">'test=%s' % test</log>
    </iterate>

But, I don't think that Cindy wanted to sort the Map by key.  She wanted to 
sort the map by order of insertion.

--------------------------------------------------------------
Sharon Lucas
IBM Austin,   luc...@us.ibm.com
(512) 286-7313 or Tieline 363-7313




From:        Joseph J Veilleux/Lexington/IBM
To:        Sharon Lucas/Austin/IBM@IBMUS,
Cc:        Cindy Zhu <c...@fekete.com>, "staf-users@lists.sourceforge.net" 
<staf-users@lists.sourceforge.net>
Date:        10/26/2011 12:11 PM
Subject:        Re: [staf-users] Iterating a dictionary in a STAX job
________________________________


Sharon, the List.sort() method in Python sorts a list in-place (i.e. it 
operates on the list itself; it does not yield a sorted list as output), so I 
doubt that the suggestion in your second paragraph would work, at least not in 
the specific way you have shown it.

---------------------------------------------------------------------------------------
Joe Veilleux
IBM/Lotus Domino Server Quality Engineering
550 King Street
Littleton MA 01460
Email: joeveill...@us.ibm.com



Sharon Lucas/Austin/IBM@IBMUS

10/25/2011 04:54 PM

To

Cindy Zhu <c...@fekete.com>

cc

"staf-users@lists.sourceforge.net" <staf-users@lists.sourceforge.net>

Subject

Re: [staf-users] Iterating a dictionary in a STAX job







A dictionary (dict) in Python does not preserve order.  Instead of order, a 
dictionary uses a hashing algorithm to identify each item's place in the 
dictionary for fast lookup.  For more information, google for information about 
Python dictionaries, for example, see 
http://homepage.mac.com/s_lott/books/python/html/p02/p02c05_maps.html.

You could sort the keys (e.g. testsWin.keys().sort(), but that will sort the 
keys in alphabetical order, not the order in which you defined them.

Instead, you could use a list as it preserves order (if you didn't really need 
a dictionary).  For example, a list of strings, or a list of dictionaries, or 
what ever you needed.  If you really need to use a dictionary, you could do 
something like described at 
http://stackoverflow.com/questions/60848/how-do-you-retrieve-items-from-a-dictionary-in-the-order-that-theyre-inserted.

Here's an example that uses a list of strings:

<script>
 testsWin = [ 'Harmony', 'DeclinePlus', 'Harmony1', 'RTA' ]
</script>

<iterate var="test" in="testsWin">
 <log message="1">'test=%s' % test</log>
</iterate>

STAX Job's Message/Log Output:
---------------------------------------------------
20111025-15:36:47

Info

test=Harmony

20111025-15:36:47

Info

test=DeclinePlus

20111025-15:36:47

Info

test=Harmony1

20111025-15:36:47

Info

test=RTA




Or you could use a list of dictionaries if you needed to store more information 
about each item in the list.  For example:

<script>
 testsWin = [ {'name':'Harmony', 'count':0},
              {'name':'DeclinePlus', 'count':0},
              {'name':'Harmony1', 'count':0},
              {'name':'RTA', 'count':0}
            ]
</script>

<iterate var="test" in="testsWin">
 <log message="1">'testName=%s, testCount=%s' % (test['name'], 
test['count'])</log>
</iterate>

STAX Job's Message/Log Output:
---------------------------------------------------
20111025-15:36:47

Info

testName=Harmony, testCount=0

20111025-15:36:47

Info

testName=DeclinePlus, testCount=0

20111025-15:36:47

Info

testName=Harmony1, testCount=0

20111025-15:36:47

Info

testName=RTA, testCount=0




Note that in Python 2.7, an OrderedDict API was added that provides the same 
interface as regular dictionaries but iterates over keys and values in a 
guaranteed order depending on when a key was first inserted.  However, STAX 
V3.5.0 and later uses Jython 2.5.2 which is the latest Jython version available 
and is based on Python 2.5 so it doesn't support the OrderedDict API.  Jython 
development lags behind Python.

--------------------------------------------------------------
Sharon Lucas
IBM Austin,   luc...@us.ibm.com
(512) 286-7313 or Tieline 363-7313




From:        Cindy Zhu <c...@fekete.com>
To:        "staf-users@lists.sourceforge.net" 
<staf-users@lists.sourceforge.net>,
Date:        10/25/2011 03:05 PM
Subject:        [staf-users] Iterating a dictionary in a STAX job
________________________________



Hi,

I have the following STAX job to iterate a dictionary and print out the keys in 
the dictionary.

<script>
               testsWin = {'Harmony':0,'DeclinePlus':0, 'Harmony1':0, 'RTA':0}
</script>

<defaultcall function="main" />

<function name="main" scope="local">
               <sequence>
                                <iterate var="test" in="testsWin.keys()">
                                <log message="1">'test=%s' % test</log>
                                </iterate>
               </sequence>
</function>

The log message shows in this order: Harmony1, DeclinePlus, RTA, Harmony.

Is there a way to make the print out(message) has the same key order as that in 
variable testsWin?

Thanks,

Cindy



------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn
about Cisco certifications, training, and career opportunities.
http://p.sf.net/sfu/cisco-dev2dev
_______________________________________________
staf-users mailing list
staf-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/staf-users

------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn
about Cisco certifications, training, and career opportunities.
http://p.sf.net/sfu/cisco-dev2dev_______________________________________________
staf-users mailing list
staf-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/staf-users
------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn 
about Cisco certifications, training, and career opportunities. 
http://p.sf.net/sfu/cisco-dev2dev
_______________________________________________
staf-users mailing list
staf-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/staf-users

Reply via email to