位置: IT常识 - 正文

巧用Python字典处理索引统计(python 字典中的字典)

编辑:rootadmin

推荐整理分享巧用Python字典处理索引统计(python 字典中的字典),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python字典x in d,python 字典怎么用,python 字典,python 字典用法,python 字典用法,python字典x in d,python 字典怎么用,python 字典中的字典,内容如对您有帮助,希望把文章链接给更多的朋友!

索引引擎的基本工作原理便是倒排索引, 即将一个文档所包含的文字反过来映射至文档; 这方面算法并没有太多花样可言, 为了增加效率, 索引数据尽可往内存里面搬。

而基本思路举个简单例子, 现在有以下文档 (分词已经完成) 以及其包含的关键词:

doc_a:[word_w,word_x,word_y]doc_b:[word_x,word_z]doc_c:[word_y]

将其变换为

word_w->[doc_a]word_x->[doc_a,doc_b]word_y->[doc_a,doc_c]word_z->[doc_b]

写成 Python 代码, 便是

doc_a={'id':'a','words':['word_w','word_x','word_y']}doc_b={'id':'b','words':['word_x','word_z']}doc_c={'id':'c','words':['word_y']}docs=[doc_a,doc_b,doc_c]indices=dict()fordocindocs:forwordindoc['words']:ifwordnotinindices:indices[word]=[]indices[word].append(doc['id'])printindices

不过这里有个小技巧, 就是对于判断当前词是否已经在索引字典里的分支

ifwordnotinindices:indices[word]=[]巧用Python字典处理索引统计(python 字典中的字典)

可以被 dict 的 setdefault(key, default=None) 接口替换. 此接口的作用是, 如果 key 在字典里, 那么好说, 拿出对应的值来; 否则, 新建此 key , 且设置默认对应值为 default . 但从设计上来说, 我不明白为何 default 有个默认值 None , 看起来并无多大意义, 如果确要使用此接口, 大体都会自带默认值吧, 如下

fordocindocs:forwordindoc['words']:indices.setdefault(word,[]).append(doc['id'])

这样就省掉分支了, 代码看起来少很多.

不过在某些情况下, setdefault 用起来并不顺手: 当 default 值构造很复杂时, 或产生 default 值有副作用时, 以及一个之后会说到的情况; 前两种情况一言以蔽之, 就是 setdefault 不适用于 default 需要惰性求值的场景. 换言之, 为了兼顾这种需求, setdefault 可能会设计成

defsetdefault(self,key,default_factory):ifkeynotinself:self[key]=default_factory()returnself[key]

倘若真如此, 那么上面的代码应改成

fordocindocs:forwordindoc['words']:indices.setdefault(word,list).append(doc['id'])

不过实际上有其它替代方案, 这个最后会提到.

如果说上面只是一个能预见但实际上可能根本不会遇到的 API 缺陷, 那么下面这个就略打脸了.

考虑现在要进行词频统计, 即一个词在文章中出现了多少次, 如果直接拿 dict 来写, 大致是

defword_count(words):count=dict()forwordinwords:count.setdefault(word,0)+=1returncountprintword_count(['hiiragi','kagami','hiiragi','tukasa','yosimizu','kagami'])

当你兴致勃勃地跑起上面代码时, 代码会以迅雷不及掩脸之势把异常甩到你鼻尖上 --- 因为出现在 += 操作符左边的 count.setdefault(word, 0) 在 Python 中不是一个左值. 怎样, 现在开始念叨 C艹 类型体系的好了吧.

因为 Python 把默认的字面常量 {} 等价于 dict() 就认为 dict 是银弹的思想是要不得的; Python 里面各种数据结构不少, 解决统计问题, 理想的方案是 collections.defaultdict 这个类. 下面的代码想必看一眼就明白

fromcollectionsimportdefaultdictdoc_a={'id':'a','words':['word_w','word_x','word_y']}doc_b={'id':'b','words':['word_x','word_z']}doc_c={'id':'c','words':['word_y']}docs=[doc_a,doc_b,doc_c]indices=defaultdict(list)fordocindocs:forwordindoc['words']:indices[word].append(doc['id'])printindicesdefword_count(words):count=defaultdict(int)forwordinwords:count[word]+=1returncountprintword_count(['hiiragi','kagami','hiiragi','tukasa','yosimizu','kagami'])

完满解决了之前遇到的那些破事.

本文链接地址:https://www.jiuchutong.com/zhishi/310268.html 转载请保留说明!

上一篇:电脑学习网首发最强MacBook苹果笔记本macos电脑应用Sublime Text 4代码编辑器最新4134版本-破解(学电脑网站)

下一篇:英文好书推荐(更新ing)(英文好书推荐)

  • 苹果耳机为啥一直闪白灯(苹果耳机为啥一个有电一个没电)

    苹果耳机为啥一直闪白灯(苹果耳机为啥一个有电一个没电)

  • 怎么在支付宝添加电子驾证(怎么在支付宝添加银行卡)

    怎么在支付宝添加电子驾证(怎么在支付宝添加银行卡)

  • 苹果11的3dtouch在哪设置(苹果11手机3dtouch功能在哪里)

    苹果11的3dtouch在哪设置(苹果11手机3dtouch功能在哪里)

  • hdmi热插拔会怎样(hdmi线热插拔会立刻烧掉吗)

    hdmi热插拔会怎样(hdmi线热插拔会立刻烧掉吗)

  • 苹果照片流在哪(苹果照片流在哪里)

    苹果照片流在哪(苹果照片流在哪里)

  • 抖音作品在什么时间段发布可以热门(抖音作品在什么条件下可以上同城推荐)

    抖音作品在什么时间段发布可以热门(抖音作品在什么条件下可以上同城推荐)

  • 佳能电池要充多久才满(佳能电池充多久才满)

    佳能电池要充多久才满(佳能电池充多久才满)

  • 汉字机内码占几个字节(常用汉字机内码)

    汉字机内码占几个字节(常用汉字机内码)

  • 为什么wps分享出去和原版不一样(为什么wps分享出来的文件是链接)

    为什么wps分享出去和原版不一样(为什么wps分享出来的文件是链接)

  • 拼多多怎么能不让别人看到自己买的东西(拼多多怎么能不让好友看买过的东西)

    拼多多怎么能不让别人看到自己买的东西(拼多多怎么能不让好友看买过的东西)

  • 4g和4g+有什么区别(4g和4g+有什么区别信号是更好还是更差?)

    4g和4g+有什么区别(4g和4g+有什么区别信号是更好还是更差?)

  • poe摄像头可以单独供电吗(poe摄像头可以单独接在路由器上吗?)

    poe摄像头可以单独供电吗(poe摄像头可以单独接在路由器上吗?)

  • emui是鸿蒙系统吗(鸿蒙是emui几)

    emui是鸿蒙系统吗(鸿蒙是emui几)

  • 华为m6长宽多少厘米(华为m6长宽高是多少)

    华为m6长宽多少厘米(华为m6长宽高是多少)

  • app闪退是什么原因(app闪退是什么原因 怎么解决华为)

    app闪退是什么原因(app闪退是什么原因 怎么解决华为)

  • 220伏电器在110伏电压下能用吗(220伏电器在110伏电压下能用吗?)

    220伏电器在110伏电压下能用吗(220伏电器在110伏电压下能用吗?)

  • download模式什么意思(downloadmode模式如何处理)

    download模式什么意思(downloadmode模式如何处理)

  • 智能ic卡水表显示的数字是什么(智能ic卡水表显示E—07)

    智能ic卡水表显示的数字是什么(智能ic卡水表显示E—07)

  • 为什么朋友圈发视频会模糊(为什么朋友圈发不了视频)

    为什么朋友圈发视频会模糊(为什么朋友圈发不了视频)

  • 手机可以做文件夹吗(手机上怎么做电子版的文件)

    手机可以做文件夹吗(手机上怎么做电子版的文件)

  • 荣耀8青春版支持快充吗(荣耀8青春版支持电信volte吗)

    荣耀8青春版支持快充吗(荣耀8青春版支持电信volte吗)

  • 荣耀9x摄像头怎么升降(荣耀9x摄像机)

    荣耀9x摄像头怎么升降(荣耀9x摄像机)

  • word选项卡编辑在哪(word设置选项卡)

    word选项卡编辑在哪(word设置选项卡)

  • 杜比全景声手机有啥用(杜比全景声手机软件下载)

    杜比全景声手机有啥用(杜比全景声手机软件下载)

  • 抖音企业号怎样连接电话(抖音企业号怎样变成个人号)

    抖音企业号怎样连接电话(抖音企业号怎样变成个人号)

  • s10呼吸灯如何开启(s10 呼吸灯)

    s10呼吸灯如何开启(s10 呼吸灯)

  • 中国手机为什么不用北斗卫星(中国手机为什么不能用谷歌)

    中国手机为什么不用北斗卫星(中国手机为什么不能用谷歌)

  • 如何在Mac上更改Siri语音?Mac上更改Siri语音方法(如何在Mac上更改我的Apple ID)

    如何在Mac上更改Siri语音?Mac上更改Siri语音方法(如何在Mac上更改我的Apple ID)

  • eraser.exe进程是什么文件 eraser进程查询(进程lsass.exe)

    eraser.exe进程是什么文件 eraser进程查询(进程lsass.exe)

  • Navicat for MySQL 15 v15.0.27 中文企业正式版(附安装教程) 32/64位 破解版

    Navicat for MySQL 15 v15.0.27 中文企业正式版(附安装教程) 32/64位 破解版

  • python如何打印矩阵(python打印矩形方阵)

    python如何打印矩阵(python打印矩形方阵)

  • 小规模纳税人应交增值税明细科目
  • 装修及室内设计实训报告
  • 几年前的发票能入账吗
  • 已开发票查询不到怎么回事
  • 哪些单位和个人可构成全宗
  • 年底预收货款如何入账
  • 什么样的情况可以补缴社保
  • 发票领购簿遗失怎么办
  • 非税收入包括哪些项目行政事业性收费
  • 预计负债账务处理 固定资产
  • 收到发票错误主管有责任吗
  • 开具的发票是否为印花税的应税凭证?
  • 外币报表折算差额在会计报表中应作为
  • 如何计算非居民用电量
  • 农业生产企业是指什么
  • 企业出租房屋交什么税?
  • 所得税汇算政策
  • 开票资料没有电话号码可以写法人名字吗
  • 小规模税务30万免税政策
  • 企业汽油费会计分录
  • 进口报关单是什么样子的
  • 财务报表教育费附加包含地方教育费附加吗
  • 材料验收入库的会计科目
  • 小规模企业出口可以不报关吗
  • 应付职工薪酬借方负数是什么意思
  • 分公司应收款转总公司会计分录?
  • 收到分包公司工程发票收入怎么做账
  • 佣金回扣如何做账
  • 哪些情形需要办理外债审核登记
  • ajax获取php数据
  • 电脑开机时进入bios界面快捷键
  • 一叶兰的养殖方法和注意事项有哪些
  • php输入输出
  • 税款返还的会计处理方法
  • 购买办公楼之后怎么入账
  • 企业亏损还需要交增值税吗
  • 税控盘维护费全额抵扣分录怎么做
  • 国有企业收到财政补助如何做账
  • 论文导语如何写
  • 史上最强i3
  • docker 容器
  • 以小物件为话题写出背后的故事
  • 租赁房屋开具发票商品名称
  • 企业购买的结构性存款怎样做账
  • 公司认缴出资怎么交税
  • 小企业会计准则和企业会计准则的区别
  • 一般纳税人什么情况可以开3%的发票
  • 申报错误后处理有影响吗
  • mysql8编译安装
  • 行政单位可以对外进行投资吗?
  • 盖骑缝章的合同可以双面打印吗
  • 结汇时和月底结转汇兑损益
  • 销售样品分录
  • 物业公司转售电费增值税
  • 维修费收入怎么结转销售成本
  • 其他应付款长期挂账违反什么规定
  • 印花税滞纳金怎么处理
  • 存出投资款应计入什么科目
  • 进口关税怎么算增值税
  • 本年利润有余额么
  • sql server发布
  • MySQL 5.0.96 for Windows x86 32位绿色精简版安装教程
  • Mac下mysql 5.7.13 安装配置方法图文教程
  • 关闭默认共享的影响
  • 如何启动vmware authorization service
  • centos启动不了图形界面
  • LibreOffice 4.1.4 正式版下载
  • 微软系统win10
  • win1020h2版本要更新多久
  • windows定时计划
  • javascript的字符串操作
  • Python遍历文件夹及子文件夹中的所有文档
  • unity4.5.3f3 和 Android的通信
  • 安卓使用icloud
  • python汉字
  • jquery formbuilder
  • 江西省电子税务局官网app
  • 税务局和国税
  • 成都税务怎么查询社保缴费记录
  • 食品烟酒消费包括哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设