从普通的字典中获取有序字典

时间:2015-02-15 17:17:33

标签: python dictionary

从常规字典中获取有序字典的好方法是什么?我需要按键(并且这些键是提前知道的)按特定顺序。我将"将这些词典的列表转储到JSON文件中,并且需要以某种方式排序。

---编辑并添加以下内容

例如我有一本字典......

employee = { 'phone': '1234567890', 'department': 'HR', 'country': 'us', 'name': 'Smith' }

当我将其转储为JSON格式时,我希望将其打印为

{ 'name': 'Smith', 'department': 'HR', 'country': 'us', 'phone': '1234567890'}

2 个答案:

答案 0 :(得分:0)

对dict项目进行排序,并从已排序的元素中创建OrderedDict,确保通过reverse=True从最高到最低排序:

from collections import OrderedDict

order = ("name","department","country","phone")
employee = { 'phone': '1234567890', 'department': 'HR', 'country': 'us', 'name': 'Smith' }
od = OrderedDict((k, employee[k]) for k  in order)

但是如果您转储到json文件并再次加载,订单将维持,您将获得OrderedDict,当您转储它时看起来像:

 {"name": "Smith", "department": "HR", "country": "us", "phone": "1234567890"}

但是加载将不会是相同的顺序,因为正常的dicts没有如下所示的顺序:

{'phone': '1234567890', 'name': 'Smith', 'country': 'us', 'department': 'HR'}

如果你试图只是存储dicts再次使用并希望维持秩序,你可以发酵:

import pickle

with open("foo.pkl","wb") as f:
   pickle.dump(od,f)

with open("foo.pkl","rb") as f:
   d = pickle.load(f)
   print(d)

答案 1 :(得分:-1)

您可以执行以下操作...在String列表中按顺序收集键,遍历列表并在字典中查找,并创建有序字典

def makeOrderedDict(dictToOrder, keyOrderList):
    tupleList = []
    for key in keyOrderList:
        tupleList.append((key, dictToOrder[key]))
    return OrderedDict(tupleList)