从普通字典中获取有序字典
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)
从普通字典中获取有序字典的好方法是什么?我需要密钥(这些密钥是提前知道的)按一定顺序排列。我将 "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)