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

遍历字典列表,如何根据竞品名称获取对应短名?

问题描述

现有存储快餐信息的字典列表fastfoods,每个字典包含id、name、shortname、competitor字段。需求如下:

  • 遍历每个字典,提取竞品名称
  • 根据该竞品名称,找到列表中name字段匹配的字典并获取其shortname

当前实现代码逻辑错误,无法达成目标,示例代码如下:

fastfoods = [{'id': 30, 'name': 'McDonalds', 'shortname': 'MC', 'competitor': 'BurgerKing'}, {'id': 47, 'name': 'BurgerKing', 'shortname': 'BK', 'competitor': None}]

for fastfood in fastfoods:
    competitor_name = fastfood.get('competitor')
    short_name = fastfood.get('shortname')

    for fastfood in fastfoods:
        if competitor_name == short_name:
            print(fastfood.get('shortname')

以示例第一个字典为例,提取竞品名称'BurgerKing'后,需找到name字段为'BurgerKing'的字典,获取其shortname(即'BK')。实际场景中列表包含数千个字典,需要高效实现。

优化实现方案

直接嵌套循环遍历数千条数据会导致O(n²)的时间复杂度,效率极低。推荐先构建一个name到shortname的映射字典,之后遍历原列表时直接通过映射快速查找,时间复杂度降为O(n)。

步骤1:构建名称映射字典

遍历一次fastfoods,把每个快餐的name作为键,shortname作为值存入字典,后续查找直接通过键取值:

# 构建name到shortname的映射
name_to_shortname = {item['name']: item['shortname'] for item in fastfoods}

步骤2:遍历原列表获取竞品缩写

遍历每个快餐条目,提取competitor名称,再从映射字典中获取对应的shortname:

fastfoods = [{'id': 30, 'name': 'McDonalds', 'shortname': 'MC', 'competitor': 'BurgerKing'}, {'id': 47, 'name': 'BurgerKing', 'shortname': 'BK', 'competitor': None}]

# 构建映射字典
name_to_shortname = {item['name']: item['shortname'] for item in fastfoods}

# 遍历处理每个快餐的竞品
for food in fastfoods:
    competitor_name = food.get('competitor')
    if competitor_name:  # 跳过竞品为None的情况
        competitor_shortname = name_to_shortname.get(competitor_name)
        print(f"{food['name']} 的竞品缩写是 {competitor_shortname}")

代码说明

  • 映射字典name_to_shortname只需要构建一次,后续查找都是O(1)的时间开销,适合处理大量数据
  • 增加了if competitor_name:判断,避免竞品为None时出现无效查找
  • 输出结果更清晰,明确对应关系

运行示例代码会输出:

McDonalds 的竞品缩写是 BK

内容的提问来源于stack exchange,提问作者Yen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:05:16