字典中的列表元素按照某个字段的优先级列表排序

dic字典中每个key对应的一个大字典,这些大字典的结构完全一样,里面有一个channel_settings列表,这个列表中包含结构一样的小字典,这些小字典有一个channel_settting_id字段,现在的需求是,我有一个外部的channel_setting_id_list列表,我想根据外部的channel_setting_id_list列表的顺序,对每个大字典的channel_setting列表中的元素排序!

代码:

from pprint import pprint

dic = {
    "A": {
        "name": "这是模版名称(测试wbx)",
        "message_template_group_id": "7391503245786869761",
        "main_channel_risk_warning": 0,
        "channel_settings": [
            {
                "channel": 2,
                "channel_setting_id": 5,
                "channel_setting_name": "创蓝短信",
                "title": None,
                "body": None,
                "link": None,
                "attachment": [],
                "signature_name": None,
                "ali_template_id": "",
                "xcx_template_id": ""
            },
            {
                "channel": 0,
                "channel_setting_id": 1,
                "channel_setting_name": "天畅短信行业账号",
                "title": None,
                "body": "",
                "link": None,
                "attachment": [],
                "signature_name": "格上基金",
                "ali_template_id": "",
                "xcx_template_id": ""
            },
            {
                "channel": 3,
                "channel_setting_id": 4,
                "channel_setting_name": "阿里云邮箱",
                "title": "这是一个邮件标题",
                "body": "",
                "link": None,
                "attachment": [],
                "signature_name": None,
                "ali_template_id": "",
                "xcx_template_id": ""
            }
        ]
    },
    "B": {
        "name": "这是模版名称2(测试wbx)",
        "message_template_group_id": "7391503245786869761",
        "main_channel_risk_warning": 0,
        "channel_settings": [
            {
                "channel": 2,
                "channel_setting_id": 5,
                "channel_setting_name": "创蓝短信",
                "title": None,
                "body": None,
                "link": None,
                "attachment": [],
                "signature_name": None,
                "ali_template_id": "",
                "xcx_template_id": ""
            },
            {
                "channel": 0,
                "channel_setting_id": 1,
                "channel_setting_name": "天畅短信行业账号",
                "title": None,
                "body": "",
                "link": None,
                "attachment": [],
                "signature_name": "格上基金",
                "ali_template_id": "",
                "xcx_template_id": ""
            },
            {
                "channel": 3,
                "channel_setting_id": 4,
                "channel_setting_name": "阿里云邮箱",
                "title": "这是一个邮件标题",
                "body": "",
                "link": None,
                "attachment": [],
                "signature_name": None,
                "ali_template_id": "",
                "xcx_template_id": ""
            }
        ]
    }
}

channel_setting_id_list = [1, 4, 5]
priority_map = {cid: idx for idx, cid in enumerate(channel_setting_id_list)}

for key, tmpl in dic.items():
    tmpl["channel_settings"].sort(
        key=lambda item: priority_map.get(item["channel_setting_id"], 9999)
    )

pprint(dic)
'''
{'A': {'channel_settings': [{'ali_template_id': '',
                                   'attachment': [],
                                   'body': '',
                                   'channel': 0,
                                   'channel_setting_id': 1,
                                   'channel_setting_name': '天畅短信行业账号',
                                   'link': None,
                                   'signature_name': '格上基金',
                                   'title': None,
                                   'xcx_template_id': ''},
                                  {'ali_template_id': '',
                                   'attachment': [],
                                   'body': '',
                                   'channel': 3,
                                   'channel_setting_id': 4,
                                   'channel_setting_name': '阿里云邮箱',
                                   'link': None,
                                   'signature_name': None,
                                   'title': '这是一个邮件标题',
                                   'xcx_template_id': ''},
                                  {'ali_template_id': '',
                                   'attachment': [],
                                   'body': None,
                                   'channel': 2,
                                   'channel_setting_id': 5,
                                   'channel_setting_name': '创蓝短信',
                                   'link': None,
                                   'signature_name': None,
                                   'title': None,
                                   'xcx_template_id': ''}],
             'main_channel_risk_warning': 0,
             'message_template_group_id': '7391503245786869761',
             'name': '这是模版名称(测试wbx)'},
       'B': {'channel_settings': [{'ali_template_id': '',
                                   'attachment': [],
                                   'body': '',
                                   'channel': 0,
                                   'channel_setting_id': 1,
                                   'channel_setting_name': '天畅短信行业账号',
                                   'link': None,
                                   'signature_name': '格上基金',
                                   'title': None,
                                   'xcx_template_id': ''},
                                  {'ali_template_id': '',
                                   'attachment': [],
                                   'body': '',
                                   'channel': 3,
                                   'channel_setting_id': 4,
                                   'channel_setting_name': '阿里云邮箱',
                                   'link': None,
                                   'signature_name': None,
                                   'title': '这是一个邮件标题',
                                   'xcx_template_id': ''},
                                  {'ali_template_id': '',
                                   'attachment': [],
                                   'body': None,
                                   'channel': 2,
                                   'channel_setting_id': 5,
                                   'channel_setting_name': '创蓝短信',
                                   'link': None,
                                   'signature_name': None,
                                   'title': None,
                                   'xcx_template_id': ''}],
             'main_channel_risk_warning': 0,
             'message_template_group_id': '7391503245786869761',
             'name': '这是模版名称2(测试wbx)'}}
'''

~~~

posted on 2025-11-27 09:40  江湖乄夜雨  阅读(3)  评论(0)    收藏  举报