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

Python使用pattern matching匹配邮编存入字典结果不符合预期

问题原因

你的代码多嵌套了一层遍历所有测试邮编的for k循环,导致每个邮编键下都存入了所有测试邮编的匹配结果,还额外多了一层列表嵌套。

修改方案

直接删除多余的内层循环,针对当前遍历的邮编直接过滤地址即可,修改后代码如下:

import pandas as pd

test = pd.DataFrame(['SR2', 'SA1', 'M16', 'KY6', 'SR6'], columns=(['postcode']))
street = pd.DataFrame(['UnnamedRoad,LlandeiloSA196UA,UK', '8NewRd,LlandeiloSA196DB,UK','1RomanRd,Banwen,NeathSA109LH,UK', 'UnnamedRoad,LlangadogSA199UN,UK', '48ColeAve,ChadwellStMary,GraysRM164JQ,UK', '37WellingtonRd,NorthWealdBassett,EppingCM166JY,UK'], columns=(['address']))

dictframe = {}
for postcode in test['postcode']:
    # 筛选包含当前邮编的所有地址
    match_list = [addr for addr in street['address'] if postcode in addr]
    dictframe[postcode] = match_list

如果需要更高效的匹配,可以使用pandas内置方法实现:

dictframe = (
    test['postcode']
    .apply(lambda x: street[street['address'].str.contains(x)]['address'].tolist())
    .set_axis(test['postcode'])
    .to_dict()
)

运行后输出结果和预期一致:

{'SR2': [],
 'SA1': ['UnnamedRoad,LlandeiloSA196UA,UK', '8NewRd,LlandeiloSA196DB,UK', '1RomanRd,Banwen,NeathSA109LH,UK', 'UnnamedRoad,LlangadogSA199UN,UK'],
 'M16': [],
 'KY6': [],
 'SR6': []}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:09:03