You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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])),但结果不符合预期。

解决方案

实现思路

  1. 遍历字典的每个键值对
  2. 提取每个元素的数字前缀并转为整数,收集所有前缀值
  3. 若前缀值仅有一种,直接跳过该键
  4. 找到前缀最大值,过滤掉带该最大值前缀的元素
  5. 提取剩余元素的名称部分,按要求格式输出

代码实现

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 15:09:21