Ticket #117 (closed defect: invalid)

Opened 5 years ago

Last modified 5 years ago

Key Ordering

Reported by: pschmitt@… Owned by: xi
Priority: normal Component: pyyaml
Severity: normal Keywords: Key Ordering
Cc: pschmitt@…


I dont understand how PyYAML reads YML files with "Block Mapping", (I call these "Nested variables" in my example):

>>> document = """
 Variable 1:
   x: a
   y: b
   z: c
 Variable 2:
   1: a
   2: b
   3: c
>>> yml=yaml.load(document)
>>> yml.keys()
['Variable 2', 'Variable 1']

>>> yml["Variable 1"].keys()
 ['y', 'x', 'z']

So it looks like PyYAML loads the document in reverse order, "Variable 2" is read before "Variable 1". That's fine. But why is ymlVariable 1?.keys() in a random order? It seems like it should either be chronological (x,y,z) or reverse chronological (z,y,x).

I'm having a hard time parsing tickets #29 and #116, which might be related... Can you offer up some insight?

PS: Sorry if this is the wrong place for a question... I couldn't find a mailing list.


Change History

comment:1 Changed 5 years ago by py4fun@…

The mailing list is 'yaml-core' (

Dictionaries have no concept of order among elements. It is incorrect to say that the elements are “in a random order”; they are simply unordered.

If the order is important use 'omap' type (

comment:2 Changed 5 years ago by xi

  • Status changed from new to closed
  • Resolution set to invalid

The above comment is correct, keys() are not obliged to return dictionary keys in any particular order. It's a general Python issue, not really related to PyYAML.


Add a comment

Modify Ticket

Change Properties
<Author field>
as closed
The resolution will be deleted. Next status will be 'reopened'

E-mail address and user name can be saved in the Preferences.

Note: See TracTickets for help on using tickets.