将州和城市与可能的多个单词相匹配

2024-01-10

我有一个类似以下元素的 Python 列表:

['Alabama[edit]',
 'Auburn (Auburn University)[1]',
 'Florence (University of North Alabama)',
 'Jacksonville (Jacksonville State University)[2]',
 'Livingston (University of West Alabama)[2]',
 'Montevallo (University of Montevallo)[2]',
 'Troy (Troy University)[2]',
 'Tuscaloosa (University of Alabama, Stillman College, Shelton State)[3][4]',
 'Tuskegee (Tuskegee University)[5]',
 'Alaska[edit]',
 'Fairbanks (University of Alaska Fairbanks)[2]',
 'Arizona[edit]',
 'Flagstaff (Northern Arizona University)[6]',
 'Tempe (Arizona State University)',
 'Tucson (University of Arizona)',
 'Arkansas[edit]',
 'Arkadelphia (Henderson State University, Ouachita Baptist University)[2]',
 'Conway (Central Baptist College, Hendrix College, University of Central Arkansas)[2]',
 'Fayetteville (University of Arkansas)[7]']

该列表并不完整,但足以让您了解其中的内容。

数据的结构如下:

有一个美国州的名称,州名称后面是该州的一些城市名称。正如您所看到的,州名称以“[edit]”结尾,城市名称以带有数字的括号结尾(例如“1 https://drive.google.com/open?id=1fun9wuneVNjKZLUXtQIDWmZFAsMoTh-8”、或“[2]”),或在括号内包含大学名称(例如“(北阿拉巴马大学)”)。

(找到此问题的完整参考文件here https://drive.google.com/open?id=1fun9wuneVNjKZLUXtQIDWmZFAsMoTh-8)

理想情况下,我想要一个 Python 字典,其中以州名称作为索引,并将该州的所有城市名称嵌套列出作为该特定索引的值。因此,例如字典应该是这样的:

{'Alabama': ['Auburn', 'Florence', 'Jacksonville'...], 'Arizona': ['Flagstaff', 'Temple', 'Tucson', ....], ......}

现在,我尝试了以下解决方案,以清除不必要的部分:

import numpy as np
import pandas as pd

    def get_list_of_university_towns():
        '''
        Returns a DataFrame of towns and the states they are in from the 
        university_towns.txt list. The format of the DataFrame should be:
        DataFrame( [ ["Michigan", "Ann Arbor"], ["Michigan", "Yipsilanti"] ], 
        columns=["State", "RegionName"]  )

        The following cleaning needs to be done:

        1. For "State", removing characters from "[" to the end.
        2. For "RegionName", when applicable, removing every character from " (" to the end.
        3. Depending on how you read the data, you may need to remove newline character '\n'. 

        '''

        fhandle = open("university_towns.txt")
        ftext = fhandle.read().split("\n")

        reftext = list()
        for item in ftext:
            reftext.append(item.split(" ")[0])

        #pos = reftext[0].find("[")
        #reftext[0] = reftext[0][:pos]

        towns = list()
        dic = dict()

        for item in reftext:
            if item == "Alabama[edit]":
                state = "Alabama"

            elif item.endswith("[edit]"):
                dic[state] = towns
                towns = list()
                pos = item.find("[")
                item = item[:pos]
                state = item

            else:
                towns.append(item)

        return ftext

    get_list_of_university_towns()

我的代码生成的输出片段如下所示:

{'Alabama': ['Auburn',
  'Florence',
  'Jacksonville',
  'Livingston',
  'Montevallo',
  'Troy',
  'Tuscaloosa',
  'Tuskegee'],
 'Alaska': ['Fairbanks'],
 'Arizona': ['Flagstaff', 'Tempe', 'Tucson'],
 'Arkansas': ['Arkadelphia',
  'Conway',
  'Fayetteville',
  'Jonesboro',
  'Magnolia',
  'Monticello',
  'Russellville',
  'Searcy'],
 'California': ['Angwin',
  'Arcata',
  'Berkeley',
  'Chico',
  'Claremont',
  'Cotati',
  'Davis',
  'Irvine',
  'Isla',
  'University',
  'Merced',
  'Orange',
  'Palo',
  'Pomona',
  'Redlands',
  'Riverside',
  'Sacramento',
  'University',
  'San',
  'San',
  'Santa',
  'Santa',
  'Turlock',
  'Westwood,',
  'Whittier'],
 'Colorado': ['Alamosa',
  'Boulder',
  'Durango',
  'Fort',
  'Golden',
  'Grand',
  'Greeley',
  'Gunnison',
  'Pueblo,'],
 'Connecticut': ['Fairfield',
  'Middletown',
  'New',
  'New',
  'New',
  'Storrs',
  'Willimantic'],
 'Delaware': ['Dover', 'Newark'],
 'Florida': ['Ave',
  'Boca',
  'Coral',
  'DeLand',
  'Estero',
  'Gainesville',
  'Orlando',
  'Sarasota',
  'St.',
  'St.',
  'Tallahassee',
  'Tampa'],
 'Georgia': ['Albany',
  'Athens',
  'Atlanta',
  'Carrollton',
  'Demorest',
  'Fort',
  'Kennesaw',
  'Milledgeville',
  'Mount',
  'Oxford',
  'Rome',
  'Savannah',
  'Statesboro',
  'Valdosta',
  'Waleska',
  'Young'],
 'Hawaii': ['Manoa'],

但是,输出中存在一个错误:名称中带有空格的州​​(例如“北卡罗来纳州”)不包括在内。我可以找出背后的原因。

我想过使用正则表达式,但由于我还没有研究过它们,所以我不知道如何形成正则表达式。关于如何使用或不使用正则表达式来完成它有什么想法吗?


那么赞美一下正则表达式的威力吧:

states_rx = re.compile(r'''
^
(?P<state>.+?)\[edit\]
(?P<cities>[\s\S]+?)
(?=^.*\[edit\]$|\Z)
''', re.MULTILINE | re.VERBOSE)

cities_rx = re.compile(r'''^[^()\n]+''', re.MULTILINE)

transformed = '\n'.join(lst_)

result = {state.group('state'): [city.group(0).rstrip() 
        for city in cities_rx.finditer(state.group('cities'))] 
        for state in states_rx.finditer(transformed)}
print(result)

这产生

{'Alabama': ['Auburn', 'Florence', 'Jacksonville', 'Livingston', 'Montevallo', 'Troy', 'Tuscaloosa', 'Tuskegee'], 'Alaska': ['Fairbanks'], 'Arizona': ['Flagstaff', 'Tempe', 'Tucson'], 'Arkansas': ['Arkadelphia', 'Conway', 'Fayetteville']}

解释:

这个想法是将任务分成几个较小的任务:

  1. 加入完整列表\n
  2. 独立的州
  3. 独立的城镇
  4. 对所有找到的项目使用字典理解

First subtask
transformed = '\n'.join(your_list)

第二个子任务

^                      # match start of the line
(?P<state>.+?)\[edit\] # capture anything in that line up to [edit]
(?P<cities>[\s\S]+?)   # afterwards match anything up to
(?=^.*\[edit\]$|\Z)    # ... either another state or the very end of the string

See regex101.com 上的演示 https://regex101.com/r/ht9rTp/4.

第三个子任务

^[^()\n]+              # match start of the line, anything not a newline character or ( or )

See regex101.com 上的另一个演示 https://regex101.com/r/ht9rTp/2.

第四个子任务

result = {state.group('state'): [city.group(0).rstrip() for city in cities_rx.finditer(state.group('cities'))] for state in states_rx.finditer(transformed)}

这大致相当于:

for state in states_rx.finditer(transformed):
    # state is in state.group('state')
    for city in cities_rx.finditer(state.group('cities')):
        # city is in city.group(0), possibly with whitespaces
        # hence the rstrip

Lastly, some timing issues:
import timeit
print(timeit.timeit(findstatesandcities, number=10**5))
# 12.234304904000965

所以运行上面的100.000我在电脑上花了大约 12 秒,所以应该相当快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将州和城市与可能的多个单词相匹配 的相关文章

  • Python 在 chroot 中运行时出现错误

    我尝试在 chroot 中运行一些 Python 程序 但出现以下错误 Could not find platform independent libraries
  • 底图上的子图

    我有一张英国地图和 121 个地点 每个地点有 3 个值 我想绘制 121 个位置中每个位置的三个值的小条形图 目前 这些值绘制为markersize属性 看起来像这样 密集恐惧症情节 https i stack imgur com 5fv
  • 子进程改变目录

    我想在子目录 超级目录中执行脚本 我需要首先进入该子目录 超级目录 我无法得到subprocess进入我的子目录 tducin localhost Projekty tests ve python Python 2 7 4 default
  • 为什么导入 pdb 时出现此错误? “模块”对象没有属性“ascii_letters”

    尝试调试我的代码 我正在导入库pdb import sys from subprocess import check call import pdb functions if name main Code 我收到此错误 File reg p
  • 如何从谷歌云存储桶读取音频文件并在datalab笔记本中使用ipd播放

    我想在数据实验室笔记本中播放我从谷歌云存储桶中读取的声音文件 这个怎么做 import numpy as np import IPython display as ipd import librosa import soundfile as
  • 如何在 ReportLab 段落中插入回车符?

    有没有办法在 ReportLab 的段落中插入回车符 我试图将 n 连接到我的段落字符串 但这不起作用 Title Paragraph Title n Page myStyle 我想要这样做 因为我将名称放入单元格中 并且想要控制单元格中的
  • 在 Flask (WSGI) 中使用全局单例,我是否需要担心竞争条件? [复制]

    这个问题在这里已经有答案了 Flask 的 hello world 演示是 from flask import Flask app Flask name app route def hello return Hello World if n
  • 为 Networkx 图添加标题?

    我希望我的代码创建一个带有标题的图 使用下面的代码 可以创建绘图 但没有标题 有人可以告诉我我做错了什么吗 import pandas as pd import networkx as nx from networkx algorithms
  • 如何使用 Pandas 将巨大的 CSV 转换为 SQLite?

    我有一个巨大的表 大约 60 GB 采用存档的 CSV 文件形式 我想将其转换为 SQLite 文件 我现在所做的事情如下 import pandas import sqlite3 cnx sqlite3 connect db sqlite
  • 网页抓取 - 前往第 2 页

    如何访问数据集的第二页 无论我做什么 它都只返回第 1 页 import bs4 from urllib request import urlopen as uReq from bs4 import BeautifulSoup as sou
  • 如何对这个 Flask 应用程序进行单元测试?

    我有一个 Flask 应用程序 它使用 Flask Restless 来提供 API 我刚刚写了一些身份验证来检查 如果消费者主机被识别 该请求包含一个哈希值 通过加密 POST 的请求内容和 GET 的 URL 以及秘密 API 密钥来计
  • 从 IMDbPy 结果中的片目中获取电影 ID

    我正在尝试创建一个数据集 允许我根据 Python IMDb API 中的演员 ID 和电影 ID 加入演员和电影 现在 我正在尝试从演员的电影作品中提取电影 ID 列表 但无法做到 例如 我知道 Rodney Dangerfield 在
  • 大型数据集上的 Sklearn-GMM

    我有一个很大的数据集 我无法将整个数据放入内存中 我想在这个数据集上拟合 GMM 我可以用吗GMM fit sklearn mixture GMM 重复小批量数据 没有理由重复贴合 只需随机采样您认为机器可以在合理时间内计算的尽可能多的数据
  • Jupyter Notebook:没有名为 pandas 的模块

    我搜索了其他问题 但没有找到任何有帮助的内容 大多数只是建议您使用 conda 或 pip 安装 pandas 在我的 jupyter 笔记本中 我试图导入 pandas import pandas as pd 但我收到以下错误 Modul
  • Spyder 如何在同一线程的后台运行 asyncio 事件循环(或者确实如此?)

    我已经研究 asyncio 模块 功能几天了 因为我想将它用于我的应用程序的 IO 绑定部分 并且我认为我现在对它的工作原理有一个合理的理解 或者在至少我认为我已经理解了以下内容 任一时刻 任一线程中只能运行一个异步事件循环 一旦一切都设置
  • 为什么 bot.get_channel() 会产生 NoneType?

    我正在制作一个 Discord 机器人来处理公告命令 当使用该命令时 我希望机器人在特定通道中发送一条消息 并向用户发送一条消息以表明该命令已发送 但是 我无法将消息发送到频道 我尝试了这段代码 import discord import
  • 最小硬币找零问题——回溯

    我正在尝试用最少数量的硬币解决硬币找零问题 采用回溯法 我实际上已经完成了它 但我想添加一些选项 按其单位打印硬币数量 而不仅仅是总数 这是我下面的Python代码 def minimum coins coin list change mi
  • 如何使用Featuretools按列值从单个数据框中的多个列创建特征?

    我正在尝试根据之前的结果来预测足球比赛的结果 我在 Windows 上运行 Python 3 6 并使用 Featuretools 0 4 1 假设我有以下代表结果历史记录的数据框 原始数据框 https i stack imgur com
  • 在游戏中实现功能

    我在完成这部分作业时遇到了麻烦 我必须宣布游戏的获胜者 然后输入到函数中 输入所有 if 语句后 我必须创建一个函数def playGame 这必须包括 showRules user getUserChoice computer getCo
  • 从 pandas 数据框中绘制堆积条形图

    我有数据框 payout df head 10 复制以下 Excel 绘图的最简单 最智能和最快的方法是什么 我尝试过不同的方法 但无法让一切都到位 Thanks 如果您只想要一个堆积条形图 那么一种方法是使用循环来绘制数据框中的每一列 并

随机推荐

  • 尝试调用 ShellExecute 来运行 Mysql 和 sql 脚本

    我一直在尝试在 Delphi 应用程序中使用 ShellExecute 打开 Mysql 并运行脚本 ShellExecute Handle open PWideChar InpCommandProgram text PWideChar c
  • Asp.Net MVC - 所有控制器的通用数据

    设置 使用 Asp Net MVC 2 RC 实体框架 SQL Server VS2008 我和我的朋友正在开发一个项目 该项目将有不同的领域指向它 我们希望从请求中获取域 网站 并使用它来驱动数据 该网站数据需要成为所有控制器的一部分 前
  • Ionic Android 构建:java.lang.IllegalStateException:未指定 buildToolsVersion

    从今天起 不知何故 我的离子项目由于某种原因不再能够构建 我已经尝试删除该平台并再次添加 但没有成功 我现在几乎花了三个时间来升级 降级和重新安装 cordova 和 ionic 但由于某种原因 当我尝试构建 Android 版本时 我总是
  • xcode swift admob 不在模拟器上显示实时广告

    我之前已经在 Android 应用程序上实现了 AdMob 除非我指定 Android 模拟器将显示实时广告的测试广告 IBOutlet 弱变量bannerView GADBannerView Display Ads self banner
  • WorkManager 现有工作策略 APPEND_OR_REPLACE 未按预期运行

    我目前正在使用CoroutineWorker from androidx work work runtime ktx 2 5 0 我想要实现的是 将工人排队beginUniqueWork和一样uniqueWorkName 有政策Existi
  • 如何在 Swift 中解开任意深度嵌套的选项?

    作为 Swift 中的练习 我正在尝试编写一个扩展方法 该方法将解开任意深度嵌套的选项 这几乎没有什么实际用途 只是对 Swift 类型系统的探索 任意深度嵌套选项的示例是Optional
  • Awk 新手。与负数格式作斗争

    目标 仅输出大于 1 且小于 1 的数据 or 输出1到 1之间的数据 我有 awk 的基础知识 可以打印第 2 列 我的数据所在的位置 注意我还指定了0 1的范围 awk 0 1 print 2 test dat 我还需要行号 所以我添加
  • 如何在 php 中导入 iCloud 联系人

    如何使用 iCloud API 或使用 PHP 作为服务器端语言的任何其他方法从 iCloud 导入联系人 我知道 iCloud 支持 cardDav 我们可以通过它导入 iCloud 联系人 但是如何导入呢 这对我来说仍然是一个问题 如果
  • 如何在Python中的一行中放置多个导入

    我的问题是关于如何在一行中放置多个导入 from sys import argv from os path import exists 我们能否将上述语句修改为如下所示的单个语句 from sys os path import argv e
  • 跨 WP8 和 Win8 识别用户:ANID2 与 SafeCustomerId

    我们有一个 Web 服务 需要跨设备 wp8 和 win8 识别用户 在电话方面我们有UserExtendedProperties GetValue ANID2 其中获取的是匿名 Microsoft ID 在Windows8上有Online
  • 在 Roxygen2 中导出数据,以便无需 data() 即可使用它们

    阅读完诸如此类的问题后这个关于使用 Roxygen 记录数据集的问题 https stackoverflow com questions 9561684 documenting dataset with roxygen2我已经成功记录了一个
  • 多次使用相同的 C++ 访问说明符

    当下一行就在其正下方或下方几行时 一遍又一遍地声明多个 公共 说明符的目的是什么 我可以理解 当代码修改某些标识符的属性时 即隐藏在宏中的标识符的属性 因此更改宏内的访问属性 因此我们需要 重新定义 从宏中出来 或者当每个访问说明符部分有许
  • C# 中的位图(签名的)比较

    我们有一个有趣的项目 要求我们比较两个签名的两个黑白位图 并判断它们是否是同一个人的签名 由于这只是两个加载的位图 而不是从平板电脑捕获的数据 因此该方法与正常的签名识别略有不同 我认为需要执行以下步骤 将位图裁剪为仅签名 尝试进行某种旋转
  • 我可以用volley做同步请求吗?

    想象一下我正在使用一个已经有后台线程的服务 我可以在同一线程中使用 volley 发出请求 以便回调同步发生吗 原因有两个 首先 我不需要另一个线程 创建它会很浪费 其次 如果我处于 ServiceIntent 中 线程的执行将在回调之前完
  • 如何将公历日期转换为伊斯兰(回历)日期?

    我知道这个问题被问了很多次 但我没有找到正确的方法 我有一个String日期如 01 08 1994 我想把它转换成Hijri日期 使用IslamicCalendar java time DateTimeFormatter dateForm
  • 如何命名我们的 JS 以与 Rails 资产管道一起使用

    我理解 Rails 3 1 资产管道背后的原因 我们将所有 JS 编译在一个整洁的 可缓存的文件中 以提高性能 太好了 我们想要那个 然而 加载所有内容也意味着我们必须非常小心 如果我们附加了一些 JS 则不要在多个页面上使用某个 ID 或
  • Razor - 使用 foreach,每第 n 项插入 html

    我使用 Razor 和 MVC 5 在页面上输出大量项目列表 这是我目前拥有的内容 foreach var item in Model Items a item Name a 我想做的是输出以下内容 div class tab 0 a It
  • 在 Eclipse IDE 中使用 GCC 编译器编译 RTX 内核文件

    我们在KEIL IDE中有一个LPC2148的项目 里面有RTX内核程序以及其他程序 它是由ARM CC编译的 现在我们需要将IDE从KEIL ARM CC 更改为Eclipse GCC 当我们尝试在 Eclipse GCC 编译器中编译它
  • 如何在 JS 类中定义私有方法

    我试图为类定义一个私有方法 以测试不能从类外部调用此类方法 但是 即使我使用规范中指示的语法 我也会遇到错误 我还查了MDN 这是我的班级的代码 class CoffeeMachine waterLimit 200 checkWater v
  • 将州和城市与可能的多个单词相匹配

    我有一个类似以下元素的 Python 列表 Alabama edit Auburn Auburn University 1 Florence University of North Alabama Jacksonville Jacksonv