简体   繁体   English

字符串匹配和存储在字典中

[英]String matching and storing within a dictionary

I'm using pattern matching to collect the postcodes belonging to a street address and storing these addresses as values within a dictionary, here is what I have tried:我正在使用模式匹配来收集属于街道地址的邮政编码,并将这些地址作为值存储在字典中,这是我尝试过的:

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 i in test['postcode']:
    dictframe[i] = list()
    for k in range(0, len(test), 1):    
        dictframe[i].append(list(filter(lambda x: test['postcode'][k] in x, street['address'])))

However this prints all the outputs in each key, but I wanted only for where values appear to be within the key otherwise keep the list empty if nothing match.然而,这会打印每个键中的所有输出,但我只想要值出现在键内的位置,否则如果没有匹配项,则将列表留空。 Here's the output I get:这是我得到的 output:

{'SR2': [[],
  ['UnnamedRoad,LlandeiloSA196UA,UK',
   '8NewRd,LlandeiloSA196DB,UK',
   '1RomanRd,Banwen,NeathSA109LH,UK',
   'UnnamedRoad,LlangadogSA199UN,UK'],
  ['48ColeAve,ChadwellStMary,GraysRM164JQ,UK',
   '37WellingtonRd,NorthWealdBassett,EppingCM166JY,UK'],
  [],
  []],
..
..
..

Expected output:预计 output:

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

corrected code - inner for loop is not required & in the string matching the index of test['postcode'] needs to be used, refer Python enumerate更正的代码 -不需要内部 for 循环 & 在匹配索引的字符串中 test['postcode'] 需要使用,参考Python enumerate

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 index, i in enumerate(test['postcode']):
    dictframe[i] = list()
    #for k in range(0, len(street), 1):    
    dictframe[i].append(list(filter(lambda x: test['postcode'][index] in x, street['address'])))

Output-输出-

{'KY6': [[]],
 'M16': [['48ColeAve,ChadwellStMary,GraysRM164JQ,UK',
   '37WellingtonRd,NorthWealdBassett,EppingCM166JY,UK']],
 'SA1': [['UnnamedRoad,LlandeiloSA196UA,UK',
   '8NewRd,LlandeiloSA196DB,UK',
   '1RomanRd,Banwen,NeathSA109LH,UK',
   'UnnamedRoad,LlangadogSA199UN,UK']],
 'SR2': [[]],
 'SR6': [[]]}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM