从常规字典中获取有序字典的好方法是什么?我需要按键(并且这些键是提前知道的)按特定顺序。我将"将这些词典的列表转储到JSON文件中,并且需要以某种方式排序。
---编辑并添加以下内容
例如我有一本字典......
employee = { 'phone': '1234567890', 'department': 'HR', 'country': 'us', 'name': 'Smith' }
当我将其转储为JSON格式时,我希望将其打印为
{ 'name': 'Smith', 'department': 'HR', 'country': 'us', 'phone': '1234567890'}
答案 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)