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

Python函数生成唯一文件夹名不符合预期的问题排查

问题:生成唯一文件夹名函数不符合预期

我想要实现一个函数,传入文件夹名称列表时,若该名称未被使用过则保留原名;若已存在,就在末尾添加_1生成唯一文件夹名。但当前函数运行结果不符合预期,相关代码及输出情况如下:

原代码

folder_dict = {}

def get_unique_folder_name(name):
    if name not in folder_dict:
        folder_dict[name] = name
    else:
        folder_dict[name] += '_1'

    return folder_dict[name]


items = [
    'Home_J5',
    'Home_J5',
    'Home_J5',
    'Home_J5_1',
    'Home_J5_1_1',
]

for item in items:
    print(get_unique_folder_name(item))

当前输出

Home_J5
Home_J5_1
Home_J5_1_1
Home_J5_1
Home_J5_1_1

预期输出

Home_J5
Home_J5_1
Home_J5_1_1
Home_J5_1_1_1
Home_J5_1_1_1_1

问题原因

原代码逻辑错误在于:用输入的原始名称作为folder_dict的键来跟踪修改,而非跟踪所有已生成的唯一文件夹名。这会导致不同的原始输入(比如Home_J5_1)无法感知之前已生成的同名文件夹,直接返回重复名称。

修正后的代码

# 用集合存储所有已生成的唯一文件夹名,查询效率更高
used_folders = set()

def get_unique_folder_name(name):
    current_name = name
    # 循环生成新名称,直到找到未被使用过的
    while current_name in used_folders:
        current_name += '_1'
    # 将新名称标记为已使用
    used_folders.add(current_name)
    return current_name

items = [
    'Home_J5',
    'Home_J5',
    'Home_J5',
    'Home_J5_1',
    'Home_J5_1_1',
]

for item in items:
    print(get_unique_folder_name(item))

说明

  • 使用集合used_folders存储所有已生成的文件夹名,集合的成员查询操作效率远高于字典;
  • 对于每个输入名称,从原始名称开始,不断在末尾追加_1,直到找到一个未在集合中出现过的名称;
  • 找到唯一名称后,将其加入集合,确保后续不会重复生成。

内容的提问来源于stack exchange,提问作者robots.txt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:41:11