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

  • 车船税征收标准表
  • 2019发票认证期限新规
  • 留抵税额账上比申报表多280
  • 其他收益在报表哪个位置
  • 劳务费专票数量和单价要写吗
  • 累计折旧贷方余额是负数表示什么
  • 资产负债表金额越来越大代表什么
  • 外币账户的银行信息在哪查询
  • 劳务费做账要交个人所得税吗?
  • 园林设计开票
  • 专票认证不通过退回
  • 哪些理财产品能赎回
  • 海关增值税抵扣当月忘采集
  • 购买食堂餐具开票怎么开
  • 权益性投资损失包括哪些
  • 年初未分配利润在借方表示什么
  • 技术先进型企业认定
  • 新公司没有实收资本,他的钱从哪来
  • 仓库多入库怎么退
  • 销售净利率计算公式是什么
  • 销方开具红字发票流程
  • 小规模纳税人销售自己使用过的物品
  • 如何查看windows10
  • window10自带哪些软件
  • 收到挂靠方应缴纳税款如何做账?
  • 银行承兑汇票付款提示期限
  • 最新的会计规定出台时间
  • 银行存款日期和起息日期不一样
  • centos编辑文本
  • 设计版权费用
  • php字符串函数大全
  • PHP:pg_get_result()的用法_PostgreSQL函数
  • 公司付物业费没开发票
  • jetcar.exe - jetcar是什么进程 有什么作用
  • nvm安装及全局配置node
  • php function
  • 前端跨域的方法
  • SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
  • 企业的罚款支出指企业的行政罚款
  • 利润表本月数可以不填吗
  • thinkphp5.0框架
  • php加密后的代码能运行吗?
  • 基本户可以公对私吗
  • 计算机视觉姿势评估英语
  • vue前端常见面试题
  • sqlite3 top的查询及limit语法介绍
  • 现金预算表中的归还借款和支付利息怎么算
  • 现金发放工资会计科目怎么写
  • 停车费定额发票有效期是多久
  • 企业分配的股票股利宣告发放
  • 成品油红字发票开具后库存数量如何冲回?
  • 社会团体指的是什么单位
  • 增值税专用发票查询系统官方网站
  • 注册资本金收到之后可以转挂往来款吗
  • 对公账户 退款
  • 发票什么情况下可以作废
  • 房地产企业取得政府补助
  • 去国外参加展会办什么签证
  • 计提本月短期借款利息500元会计分录
  • win8系统升级win8.1
  • debian iso
  • 苹果mac 最新系统
  • linux 执行结果写到文件
  • win10 win7兼容模式
  • win7 运行慢
  • cocos2dx官方教程
  • cocos游戏开发教程
  • node mongoose
  • [置顶]JM259194
  • shell脚本获取本地ip
  • 盗梦英雄限时占卜顺序
  • javascript零基础入门书籍
  • html5 jquery
  • 税控盘开票软件下载官网
  • 没有单位怎么交职工养老保险
  • 船舶吨税 税率
  • 分摊费用怎么计算公式
  • 航天金税开票软件服务费可以抵扣税款吗
  • 买车购置税去哪里交钱
  • 怎么修改税局预留号码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设