当前位置: 首页 > news >正文

python单词按字典序输出_python – 我可以通过匹配键作为前缀在字典中保留新单词...

如果您正在使用dict,那么是的,您将必须迭代所有键以找到任何匹配. Dicts基于哈希表构建,并且哈希函数没有任何“开始于”或“关闭”的概念以利用(事实上,它们专门设计用于为关闭输入提供非常不同的输出).

做你想做的事并不难:

for k, v in d.items():

if s.startswith(k):

v.append(s)

break

else:

# whatever you want to do if no prefix exists

但是如果dict很大,那么效率很低,因为你正在进行线性搜索.

您可以使密钥的长度成为线性,而不是字典的长度(在测试用例中实际上会更慢,但在性能很重要的大多数情况下可能更快):

for i in range(len(s), 0, -1):

try:

d[k[:i]].append(s)

break

except KeyError:

pass

else:

# whatever you want to do if no prefix exists

但是,如果您需要最佳效率,您需要查看对数数据结构,如平衡二叉搜索树,b树,跳转列表,trie,甚至只是按排序顺序保存的普通旧列表.您可以在PyPI或ActiveState配方存储库中找到的此类类型的大多数实现都有一个方法来按排序顺序查找键的插入位置.或者,如果您使用的是普通旧列表,只需使用stdlib中的bisect模块即可.只需在插入位置之前检查密钥,然后从密钥开始,或者什么也不做.

i = d.bisect(s)

if d.iloc[i].startswith(s):

d[d.iloc[i]].append(s)

else:

# whatever you want to do if no prefix exists

如果你有一个庞大,密集的密钥集,并且你正在进行大量的查询和插入,那么前缀trie可能是最有效的.但是对于不同的特征,其他人可能会胜出.所以,如果这很重要,你会想尝试一些并进行测试.

相关文章:

  • 后台页面需要设置登录过期时间吗_电商后台优惠券设计
  • 机械制图符号_机械图纸感觉每一个都很复杂,这12个机械制图的简化画法,你会吗...
  • python爬虫基础教程115_清华学姐推荐的Python视频115集,拿走不谢 .
  • python测试udp端口_python检测远程udp端口是否打开的方法
  • 图像条纹检测 python_预告:面向强反射表面的多传感器三维检测技术研究
  • 高德地图标记文字修改样式_地图标注有哪些优势?如何进行地图标注?
  • supervisor 重启_Supervisor守护进程安装
  • tp5.0 根据经纬度 获取附近信息_通过手机信号获取基站信息—基站定位详解
  • 树复制替换id_STP生成树协议的技术要点
  • python模型的属性是什么_Python数据模型
  • python如何优化内存_如何优化Python占用的内存
  • python functools.reduce使用_Python的functools.reduce用法
  • vue computed 传参_vue生命周期
  • vb.net 循环生成excel的多个sheet_自动生成报告第一弹
  • python从零开始到放弃之二_python从入门到放弃QAQ
  • 【EOS】Cleos基础
  • 【Linux系统编程】快速查找errno错误码信息
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Electron入门介绍
  • es6要点
  • FastReport在线报表设计器工作原理
  • Github访问慢解决办法
  • JavaScript 一些 DOM 的知识点
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • leetcode讲解--894. All Possible Full Binary Trees
  • Python利用正则抓取网页内容保存到本地
  • Selenium实战教程系列(二)---元素定位
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 后端_ThinkPHP5
  • 设计模式(12)迭代器模式(讲解+应用)
  • 深入浅出webpack学习(1)--核心概念
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 说说动画卡顿的解决方案
  • No resource identifier found for attribute,RxJava之zip操作符
  • Spring Batch JSON 支持
  • 阿里云服务器如何修改远程端口?
  • 国内开源镜像站点
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​用户画像从0到100的构建思路
  • # Apache SeaTunnel 究竟是什么?
  • #HarmonyOS:软件安装window和mac预览Hello World
  • %check_box% in rails :coditions={:has_many , :through}
  • (搬运以学习)flask 上下文的实现
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET 分布式技术比较
  • .net 托管代码与非托管代码
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET/C# 使窗口永不获得焦点