如何在Python中创建一个OrderedDict?

问题描述 投票:8回答:4

我试图保持一个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"
}

无论哪种方式,我用不保留这个顺序,虽然。

python dictionary
4个回答
12
投票

您需要将其项目或插入项目的顺序,以 - 这是它是如何知道的顺序。尝试是这样的:

from collections import OrderedDict

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

该阵列有一个顺序,因此OrderedDict会知道你想要的顺序。


2
投票

OrderedDict情况下,要创建一个中间,定期(因此无序)的字典,然后才会慢慢传递给构造。为了保持秩序,你将不得不与秩序的东西传递给构造函数(例如一个元组的列表)或添加键一个接一个的(也许是在一个循环中)你想要的顺序。


1
投票

您可以使用OrderedDict但你必须采取考虑到OrderedDict不会的正在运行的代码以外的地方工作。

这意味着,出口对象为JSON将失去OrderedDict的所有影响。

你可以做的就是创建一个元数据阵列,可以在其中的密钥存储"de", sk", etc.以有序的方式。通过浏览该阵列,以便您可以查字典正确,并在数组中的顺序将生存在JSON,YAML等任何出口

当前JSON:

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

新对象countries

countries = {
  "names" : { 
    "de": "Germany", "sk": "Slovakia", "hu": "Hungary", "us": "United States", "no": "Norway"  
  },
  "order" : [ 
    "de", "sk", "hu", "us", "no" 
  ]
}

代码,将为了打印长的名字:

for code in countries['order']:
 print(countries['names'][code])

1
投票

迟到的回答,但这里有一个qazxsw POI一个衬垫qazxsw由qazxsw芋泥芋泥字典不使用进口:

python 3.6+

输出:

sort

key

© www.soinside.com 2019 - 2024. All rights reserved.