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

  • 收到待报解预算收入怎么查退的什么税
  • 国税如何零申报
  • 哪些是现代服务
  • 纳税人证明模板
  • 普通发票的税率1%
  • 价外费用是含税价还是不含税价
  • 房租押金算费用吗
  • 成本收入不配比的风险有哪些
  • 土地出让金返还的禁止性规定
  • 2021年增值税专用发票红冲发票步骤
  • 代理药品销售收取佣金会计分录怎么写?
  • 要注销的企业多久能注销
  • 过路费去年的票还可以用吗
  • 劳务费开发票还要代扣代缴吗?
  • 企业试生产期间发生的费用怎么入账
  • 外购的货物用于集体福利是销售吗
  • 买标书怎么做分录
  • 上月已认证的发票发现错误怎么办
  • 房企行业其他应收账款的来源是什么
  • 销售人员差旅费管理办法
  • 环评费属于固定资产吗
  • 所得税汇算清缴分录怎么做
  • 财务人员工资计入管理费用还是财务费用
  • 商品房买卖合同面积差3%法律规定
  • win10永久激活2021
  • win10系统下怎么安装Java JDK及配置环境变量
  • win7缓存设置方法
  • 8款应用
  • php的运行机制与什么有关
  • 彭布洛克郡谋杀
  • 路由器增强型
  • codeigniter 教程
  • 补缴房产税土地使用税怎么算
  • 没收逾期未收回的包装物押金
  • cuda10.1下载
  • vue.js mvvm
  • laravel app接口
  • framework怎么用
  • 代扣代缴企业所得税账务处理
  • thinkphp where or
  • frameworks
  • point network
  • ipcrm命令
  • 计提本月银行存款应收利息会计分录
  • 交易性金融资产是什么意思
  • 销售费用的主要类型有哪些
  • mysql主要支持哪些数据类型?
  • 零税率和免税的例子
  • 外购存货的账务处理
  • 期末存货材料成本差异
  • 发票的开具流程一般是?
  • 没有抄税会导致什么情况
  • 原材料的主要账务处理
  • 运输业开发票
  • 收到工程进度款怎么做分录
  • 利润分配明细科目有哪些
  • 刷信用卡的手续费一般是多少
  • 股东股权转让后还能起诉公司或者股东侵害其权利吗
  • 房地产经纪公司排名
  • 内部使用的收据可以做原始凭证吗
  • 二手车交易增值税发票
  • 备查账簿有没有固定的格式
  • 最全的免费追漫软件
  • MySQL关键字执行顺序
  • sqlserver数据库版本号怎么查
  • 在Linux系统中安装虚拟window
  • 苹果知识大全
  • win8电脑锁屏壁纸怎么设置方法
  • win7无法安装怎么办
  • cocos2dx4.0教程
  • js判断手机号
  • 完本小说 电子书地址
  • Node.js中的全局对象有
  • button按钮类型
  • 一个简单的防偷技巧
  • 安卓版影音播放器哪个好用
  • vue购物商城
  • python dask
  • 国税局征管科
  • 税务登记办法细则
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设