位置: 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)(英文好书推荐)

  • 实收资本印花税按次还是按年
  • 小规模缴纳增值税
  • 水电费进项税转出填在哪一栏位
  • 递延所得税资产是什么类科目
  • 企业采购哪些品类
  • 为什么有的发票税率是3%,有的是1%
  • 企业预算管理为何要以企业战略,核心竞争力,风险为导向
  • 收到借款确认书模板
  • 购进商品交印花税
  • 公司为职工在异地买医保
  • 周转材料低值易耗品摊销
  • 预收账款多说明什么
  • 通讯费可以抵扣进项税吗
  • 没超过标准的招待费缴税吗
  • 生产型增值税与消费型增值税的区别在于是否允许企业
  • 财产保险合同的主体变更
  • 虚列成本费用的后果
  • 问答技巧例子
  • 公司注销欠法人款怎么帐务处理?
  • 企业所得税上个季度赔钱下个季度挣钱
  • 厂房租赁记账凭证
  • 留抵税额如何抵扣
  • 腾讯手游助手遇到未知错误
  • 出差人员差旅费作细的说明叫什么
  • phpjson
  • 借别人资质投标如何签合同
  • PACKAGER.EXE - PACKAGER是什么进程 有什么用
  • go是单进程还是多进程
  • php阿里云oss
  • 解决安装后软件icon一圈白边问题
  • 设备租赁的方式有哪些
  • php zmq
  • 企业 土地增值税
  • 头歌HTML基础第一关初识HTML
  • yolov5的使用
  • 出口退税无纸化备案怎么弄
  • 云E办接口文档
  • vuex状态丢失
  • http命令
  • 中央空调的维护和保养
  • 一般纳税人企业所得税税率2023
  • 小规模纳税人养老保险怎么交
  • 股东撤资怎么做账
  • distinct用法及搭配
  • 既开发票又开收据是有财务风险吗?
  • 外贸出口备案需准备什么资料
  • 小企业会计准则和企业会计准则的区别
  • 材料成本差异的会计分录
  • 办理注销税务登记的流程和资料
  • 电子承兑到期怎么收款
  • 长期待摊费用会计分录
  • 发票当月没开
  • 结转损益利息收入贷方红字什么意思
  • 本年利润到年末还有余额吗
  • 待认证进项税额和待抵扣进项税额的区别
  • 回购股票注销股票怎么办
  • 职工教育经费中的职工培训费用可以全额扣除吗
  • 银行对账单和回单有什么区别
  • 投资性房地产公允价值小于账面价值
  • 公司三证合一是指哪三证
  • SQL 导入导出Excel数据的语句
  • win8旗舰版升级win10
  • 鼠标系统怎么安装
  • 电脑win10键盘失灵
  • xp系统开机一直在启动界面
  • Windows2008 对决 Windows Vista优势
  • win8禁用网络之后如何开启
  • win10 win7兼容模式
  • windows7开始菜单设置在哪里
  • 预装win7旗舰版
  • win7开始菜单中的应用程序图标隐藏了
  • JavaScript中的数据类型分哪为两大类?
  • shell脚本编写步骤
  • linux实现shell
  • python true的用法
  • 噩梦剧情
  • javascript html5移动端轻松实现文件上传
  • unity 设置物体角度
  • 注释讲解
  • 江苏省国家税务总局江苏省电子税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设