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

Get an ordered dictionary from an ordinary one

从普通字典中获取有序字典的好方法是什么?我需要密钥(这些密钥是提前知道的)按一定顺序排列。我将 "dump" 将这些词典的列表放入 JSON 文件中,并且需要按特定方式排序的内容。

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

比如我有一本字典...

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

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

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

你可以做类似下面的事情......你在 String 列表中按顺序收集键,遍历列表并在字典中查找,并创建一个有序字典

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

对您的字典项目进行排序,并从已排序的元素创建一个 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 文件并再次加载,订单将 not 保持不变,您将 not取回 OrderedDict,当你转储它时它看起来像:

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

但是加载将不会以相同的顺序进行,因为普通的字典没有如下顺序:

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

如果您只是想存储字典以供再次使用并希望维持秩序,您可以 pickle:

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)