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
相关产品推荐
相关产品推荐

