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

  • 不得从销项税中抵扣的进项税大白话
  • 当月未抵扣的进项税
  • 增值税进项税额加计抵减政策
  • 个人所得税的标准计算
  • 已发货没开票分录
  • 预付卡的发票
  • 小规模纳税人不能抵扣进项税额
  • 用友u8如何结转期间损益
  • 税务自查补缴税款算滞纳金么
  • 提取的生产企业安全费如何记帐
  • 企业进行股票买入的条件
  • 货款打了未收到发票但是公司倒闭了怎么办?
  • 建筑企业未开票收入增值税申报表怎么填写
  • 上海2018房产税实施细则
  • 在建工程转固定资产当月提折旧吗?
  • 个税当月计提还是下月
  • 外贸企业代理出口销售业务发生的费用
  • 贷款利息收到发票怎么办
  • 食堂货款报账明细表
  • 抵税的税额怎么计算
  • 增值税小规模申报表
  • 无租使用房产协议
  • 应付工资和实付工资的差额叫什么
  • 银行增值税免税收入有哪些
  • macbookpro提醒事项
  • 高新技术企业研发
  • 员工垫付款怎么做分录
  • 如何给宽带加速使用
  • thinkphp 3.2.3 getshell
  • php字符串赋值
  • php注释的主要作用是什么?
  • 广告费发票内容是什么
  • 债券溢价或折价是公司发行债券时产生的收益或损失
  • 事业单位接受捐赠固定资产入账
  • php打包网站并在哪里打开
  • 生产型企业出口退税退的是哪部分的税
  • php中数据库怎么设计
  • 有限公司股权转让的规定最新
  • 【超直白讲解opencv RGB与BGR】RGB模式与BGR模式有什么不同,如何相互转换?
  • h5项目怎么打包成app
  • js轮播图视频教程
  • linux 静态链接
  • discuz怎么用
  • 购进免税农产品进项税额计算
  • 公司员工餐费会计分录
  • 个人发票抬头是自己的名字吗
  • python @time
  • 无形资产摊销年限
  • 本期销项税额怎么算
  • 股东分红要不要纳税?
  • 我国的税种及税率
  • 公司年底奖金怎么计算
  • 事业单位现金收支流程图
  • 事业单位实收资本如何做账
  • 每月分红会计分录
  • 费用报销流程及制度
  • 数电怎么增加开票员
  • 什么是活页式账户
  • perl -ne
  • windowsxp无法格式化
  • iphone os
  • macbook安装ghost win10
  • win8怎么彻底删除软件
  • 操作系统安全配置一般包括哪些内容
  • xp系统怎么禁止软件联网
  • 微软雅黑啥意思
  • opensuse安装显卡驱动
  • linux网络不可达是什么原因
  • linux开启samba服务
  • 图形学实验报告总结
  • cocos2dx schedule
  • windows和linux的区别
  • js window.open如何带参数
  • 健壮的什么
  • dom基础知识
  • javascript工作
  • python获取数据代码
  • 中奖个人所得税扣除标准
  • 苏州峰谷电怎么申请
  • 铜梁在重庆主城哪个方向
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设