字典中的列表元素按照某个字段的优先级列表排序
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)'}} '''
~~~
浙公网安备 33010602011771号