首页 > 解决方案 > Python order 具有预定义顺序的字典

问题描述

接收一个字典并返回一个新的有序字典

从 api 返回的 json:

{
    'host': '192.168.0.1',
    'name': 'my_new_name',
    'port': 443,
    'something_more': 'hello'
}

目标:

{
    'name': 'my_new_name',
    'something_more': 'hello',
    'host': '192.168.0.1',
    'port': 443
}

有什么方法可以定义键的顺序?

例如,要在目标上实现此订单:

key_order = ('name', 'something_more', 'host', 'port')

谢谢

标签: pythonjsondictionaryordereddictionary

解决方案


您可以使用列表推导将元组列表提供给collections.OrderedDict

from collections import OrderedDict

d = {'host': '192.168.0.1', 'name': 'my_new_name',
     'port': 443, 'something_more': 'hello'}

key_order = ('name', 'something_more', 'host', 'port')
res = OrderedDict([(k, d[k]) for k in key_order])

OrderedDict([('name', 'my_new_name'),
             ('something_more', 'hello'),
             ('host', '192.168.0.1'),
             ('port', 443)])

适用于 Python 2.x 及更高版本。对于 Python 3.7+,您可以依赖插入排序并使用常规字典。


推荐阅读