How to create an OrderedDict in Python?
You need to pass it a sequence of items or insert items in order - that's how it knows the order. Try something like this:
from collections import OrderedDict
domain = OrderedDict([('de', 'Germany'),
('sk', 'Slovakia'),
('hu', 'Hungary'),
('us', 'United States'),
('no', 'Norway')])
The array has an order, so the OrderedDict will know the order you intend.
You can use OrderedDict
but you have to take in consideration that OrderedDict
will not work outside of your running code.
This means that exporting the object to JSON will lose all the effects of OrderedDict
.
What you can do is create a metadata array in which you can store the keys "de", sk", etc.
in an ordered fashion. By browsing the array in order you can refer to the dictionary properly, and the order in array will survive any export in JSON, YAML, etc.
Current JSON:
{ "de": "Germany", "sk": "Slovakia", "hu": "Hungary", "us": "United States", "no": "Norway" }
New object countries
:
countries = {
"names" : {
"de": "Germany", "sk": "Slovakia", "hu": "Hungary", "us": "United States", "no": "Norway"
},
"order" : [
"de", "sk", "hu", "us", "no"
]
}
Code that will print the long names in order:
for code in countries['order']:
print(countries['names'][code])
Late answer, but here's a python 3.6+
oneliner to sort
dictionaries by key
without using imports:
d = { "de": "Germany", "sk": "Slovakia", "hu": "Hungary",
"us": "United States", "no": "Norway" }
d_sorted = {k: v for k, v in sorted(d.items(), key=lambda x: x[1])}
print(d_sorted)
Output:
{'de': 'Germany', 'hu': 'Hungary', 'no': 'Norway', 'sk': 'Slovakia', 'us': 'United States'}
Python Demo
In the OrderedDict
case, you are creating an intermediate, regular (and hence unordered) dictionary before it gets passed to the constructor. In order to keep the order, you will either have to pass something with order to the constructor (e.g. a list of tuples) or add the keys one-by-one in the order you want (perhaps in a loop).