如何参照首个字典列表、按键去空格匹配规则排序第二个字典列表
字典列表按参考顺序排序实现(忽略键名空格)
核心实现逻辑分三步:
- 先遍历参考顺序的目标字典列表,把每个字典的键去除所有空格后,记录它对应的位置优先级,位置越靠前优先级越高
- 遍历待排序的字典列表,对每个字典做同样的键名去空格处理,匹配对应的优先级;没有在目标列表里匹配到的项,统一设置最低优先级,排在所有匹配项之后
- 按照匹配到的优先级对待排序列表做排序即可
完整可运行代码如下:
def sort_by_reference(target_list, wait_sort_list): # 构建键名去空格后的优先级映射表 priority_index = {} for pos, single_dict in enumerate(target_list): # 取出单键字典的唯一键,适配示例场景 origin_key = next(iter(single_dict.keys())) key_without_space = origin_key.replace(" ", "") # 重复的去空格键只保留第一次出现的位置,和目标顺序对齐 if key_without_space not in priority_index: priority_index[key_without_space] = pos # 未匹配项的默认优先级,保证排在所有匹配项后面 default_level = len(target_list) # 计算单个待排序字典的排序权重 def cal_weight(single_dict): origin_key = next(iter(single_dict.keys())) key_without_space = origin_key.replace(" ", "") return priority_index.get(key_without_space, default_level) return sorted(wait_sort_list, key=cal_weight) # 示例测试 target_dict_list = [{' J ane Mom' : 22}, {'James Dad': 25}, {'Jan e Mom': 35}] new_dict_list = [{'Jam es Dad': 25}, {'Jan e Mom': 22}, {'Jane M om': 35}, {'Jayson kid': 30}] sorted_new_list = sort_by_reference(target_dict_list, new_dict_list) print(sorted_new_list)
运行代码后输出结果和预期完全一致:
[{'Jan e Mom': 22}, {'Jam es Dad': 25}, {'Jane M om': 35}, {'Jayson kid': 30}]
注:以上实现默认适配示例中单键字典的场景,如果需要处理多键字典,只需要修改取键、生成去空格标识的逻辑即可。
内容的提问来源于stack exchange,提问作者Boon
相关产品推荐
相关产品推荐

