如何过滤字典列表,实现两级联动下拉的数据源处理?
字典列表分级过滤实现
原始数据
list_of_dict = [ {'label': '220_2_INTL_PRSTR_ET_619076', 'value': '220_2_INTL_PRSTR_ET_619076'}, {'label': '220_4_KAL_T2E_DOLE_344657', 'value': '220_4_KAL_T2E_DOLE_344657'}, {'label': '221_1_PB_520_REF_174049', 'value': '221_1_PB_520_REF_174049'}, {'label': '222_5_KAL_T2E_YT_344991', 'value': '222_5_KAL_T2E_YT_344991'}, {'label': '223_2_PB_520_REF_174050', 'value': '223_2_PB_520_REF_174050'}, {'label': '224_3_PB_520_REF_174051', 'value': '224_3_PB_520_REF_174051'}]
1. 获取第一个下拉菜单的唯一前缀
遍历数据提取每个条目的前3位数字,用集合去重后返回有序列表:
def get_unique_prefixes(data): prefixes = set() for item in data: prefix = item['label'][:3] prefixes.add(prefix) return sorted(prefixes) # 调用示例 unique_prefixes = get_unique_prefixes(list_of_dict) # 输出: ['220', '221', '222', '223', '224']
2. 根据选中前缀过滤完整选项
传入选中的前缀,筛选出所有label以该前缀开头的条目:
def filter_options_by_prefix(data, selected_prefix): return [item for item in data if item['label'].startswith(selected_prefix)] # 调用示例:选中前缀'220' filtered_options = filter_options_by_prefix(list_of_dict, '220') # 输出: # [ # {'label': '220_2_INTL_PRSTR_ET_619076', 'value': '220_2_INTL_PRSTR_ET_619076'}, # {'label': '220_4_KAL_T2E_DOLE_344657', 'value': '220_4_KAL_T2E_DOLE_344657'} # ]
说明
- 利用集合特性自动去重前缀,确保第一个下拉菜单的选项唯一
- 使用
startswith方法做前缀匹配,逻辑直观且适合大规模数据处理 - 两个方法均为O(n)时间复杂度,处理大型字典列表时效率较高
内容的提问来源于stack exchange,提问作者IDK
相关产品推荐
相关产品推荐

