如何在 Python 中创建一个 OrderedDict?

新手上路,请多包涵

我试图维护 Python 字典的顺序,因为本机 dict 没有任何顺序。 SE 中的许多答案建议使用 OrderedDict

 from collections import OrderedDict

domain1 = { "de": "Germany", "sk": "Slovakia", "hu": "Hungary",
    "us": "United States", "no": "Norway"  }

domain2 = OrderedDict({ "de": "Germany", "sk": "Slovakia", "hu": "Hungary",
    "us": "United States", "no": "Norway"  })

print domain1
print " "
for key,value in domain1.iteritems():
    print (key,value)

print " "

print domain2
print ""
for key,value in domain2.iteritems():
    print (key,value)

迭代后,我需要字典保持其原始顺序并将键和值按原样打印:

 {
    "de": "Germany",
    "sk": "Slovakia",
    "hu": "Hungary",
    "us": "United States",
    "no": "Norway"
}

不过,无论我使用哪种方式,都不会保留此顺序。

原文由 Eka 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 521
2 个回答

您需要向它传递一系列项目或按顺序插入项目 - 这就是它知道顺序的方式。尝试这样的事情:

 from collections import OrderedDict

domain = OrderedDict([('de', 'Germany'),
                      ('sk', 'Slovakia'),
                      ('hu', 'Hungary'),
                      ('us', 'United States'),
                      ('no', 'Norway')])

该数组有一个顺序,因此 OrderedDict 将知道您想要的顺序。

原文由 Mark 发布,翻译遵循 CC BY-SA 4.0 许可协议

OrderedDict 案例中,您正在创建一个中间的、常规的(因此是无序的)字典,然后再将其传递给构造函数。为了保持顺序,您要么必须按顺序将某些内容传递给构造函数(例如元组列表),要么按照您想要的顺序逐个添加键(可能在循环中)。

原文由 Jared Goguen 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题