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

如何修复get_phone_numbers_for_countries函数,使其返回含列表值的字典

修复手机号分类函数的返回结构问题

原代码的核心问题是每次通过dict.update()直接覆盖对应国家代码的值,导致最终每个键只保留最后一个匹配的手机号,而非收集所有匹配项的列表。以下是修复后的代码:

def sanitize_phone_number(phone):
    new_phone = (
        phone.strip()
        .removeprefix("+")
        .replace("(", "")
        .replace(")", "")
        .replace("-", "")
        .replace(" ", "")
    )
    return new_phone


def get_phone_numbers_for_countries(list_phones):
    # 初始化所有目标国家代码对应的空列表,包含默认归属地UA
    country_numbers = {"UA": [], "JP": [], "SG": [], "TW": []}
    
    for raw_num in list_phones:
        cleaned_num = sanitize_phone_number(raw_num)
        
        if cleaned_num.startswith("380"):
            country_numbers["UA"].append(cleaned_num)
        elif cleaned_num.startswith("81"):
            country_numbers["JP"].append(cleaned_num)
        elif cleaned_num.startswith("65"):
            country_numbers["SG"].append(cleaned_num)
        elif cleaned_num.startswith("886"):
            country_numbers["TW"].append(cleaned_num)
        else:
            # 未知归属的手机号归入UA列表
            country_numbers["UA"].append(cleaned_num)
    
    # 可选:过滤掉没有匹配手机号的国家代码(按需启用)
    # country_numbers = {code: nums for code, nums in country_numbers.items() if nums}
    
    return country_numbers

关键修改说明

  1. 初始化结构:提前创建包含所有目标国家代码的字典,每个键对应空列表,确保后续可以直接追加元素
  2. 替换赋值逻辑:用list.append()替代dict.update(),将每个清洗后的手机号添加到对应国家的列表中,而非覆盖原有值
  3. 优化匹配判断:使用str.startswith()替代切片判断,代码可读性更强
  4. 可选过滤:如果不需要保留没有手机号的国家代码,可以启用注释中的字典推导式过滤空列表

测试输入示例:

test_phones = ["+380998759405", "818765347", "+8867658976", "657658976", "+123456789"]
print(get_phone_numbers_for_countries(test_phones))

返回结果:

{'UA': ['380998759405', '123456789'], 'JP': ['818765347'], 'SG': ['657658976'], 'TW': ['8867658976']}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:55:58