Python实现:按字典键输出除最高前缀值外的所有项
问题描述
给定如下Python字典:
sample_dict = { 'A': ['03 some', '03 what', '01 word', '03 oui', '01 ok', '03 name', '02 file', '01 yeah', '02 brain'], 'B': ['02 whatever', '01 ok', '02 zip', '01 stack', '02 great', '01 sure'], 'C': ['01 only_one', '01 it', '01 dummy'] }
需要实现以下逻辑:
- 对字典的每个键,提取对应列表中每个元素的前两位数字前缀
- 找出该键下所有数字前缀中的最大值
- 排除所有带有这个最大值前缀的元素,输出剩余元素的名称部分(去掉前两位数字和空格后的内容)
- 如果某个键下仅存在一种数值前缀,则跳过该键
预期输出:
# of key A word ok file yeah brain # of key B ok stack sure
之前尝试使用排序代码dict(sorted(x.items(), key=lambda item: item[1])),但结果不符合预期。
解决方案
实现思路
- 遍历字典的每个键值对
- 提取每个元素的数字前缀并转为整数,收集所有前缀值
- 若前缀值仅有一种,直接跳过该键
- 找到前缀最大值,过滤掉带该最大值前缀的元素
- 提取剩余元素的名称部分,按要求格式输出
代码实现
sample_dict = { 'A': ['03 some', '03 what', '01 word', '03 oui', '01 ok', '03 name', '02 file', '01 yeah', '02 brain'], 'B': ['02 whatever', '01 ok', '02 zip', '01 stack', '02 great', '01 sure'], 'C': ['01 only_one', '01 it', '01 dummy'] } for key, items in sample_dict.items(): # 提取所有数字前缀并转为整数 prefixes = [int(item[:2]) for item in items] # 获取唯一前缀集合 unique_prefixes = set(prefixes) # 仅一种前缀则跳过 if len(unique_prefixes) == 1: continue # 找到最大前缀值 max_prefix = max(unique_prefixes) # 输出结果 print(f"# of key {key}") for item in items: current_prefix = int(item[:2]) if current_prefix < max_prefix: # 提取名称部分(跳过前两位数字和空格) print(item[3:]) print() # 空行分隔不同键的结果
代码解释
- 前缀提取:通过
item[:2]截取元素前两位,转为整数后收集到列表中,方便后续计算最大值 - 前缀判断:利用集合去重特性,快速判断前缀种类数量,仅一种则直接跳过
- 元素过滤:遍历每个元素,对比当前前缀与最大值,小于最大值的元素提取名称部分输出
- 格式控制:按照预期格式打印结果,用空行分隔不同键的输出内容
内容的提问来源于stack exchange,提问作者Kevin C
相关产品推荐
相关产品推荐

