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

  • 麒麟710和麒麟980区别(麒麟710和麒麟980哪个功耗低)

    麒麟710和麒麟980区别(麒麟710和麒麟980哪个功耗低)

  • 微信原图过期怎么恢复(微信原图过期怎样恢复)

    微信原图过期怎么恢复(微信原图过期怎样恢复)

  • e31231v2相当于i5什么(e31231v2相当于i3几代)

    e31231v2相当于i5什么(e31231v2相当于i3几代)

  • 闪迪cz880是mlc还是tlc(闪迪cz880值得买吗)

    闪迪cz880是mlc还是tlc(闪迪cz880值得买吗)

  • 腾讯视频取消自动续费怎么弄(腾讯视频取消自动收藏功能)

    腾讯视频取消自动续费怎么弄(腾讯视频取消自动收藏功能)

  • soul显示绿点是在线嘛(soul有绿点)

    soul显示绿点是在线嘛(soul有绿点)

  • miui跨版本升级可以通过什么方式(MIUI跨版本升级微信双开还在吗?)

    miui跨版本升级可以通过什么方式(MIUI跨版本升级微信双开还在吗?)

  • 微云超级会员有什么用?(微云超级会员价格)

    微云超级会员有什么用?(微云超级会员价格)

  • 苹果11还原所有设置会有什么影响(苹果11还原所有设置和抹掉所有内容和设置)

    苹果11还原所有设置会有什么影响(苹果11还原所有设置和抹掉所有内容和设置)

  • k20pro屏幕刷新率(k20pro屏幕刷新率是多少)

    k20pro屏幕刷新率(k20pro屏幕刷新率是多少)

  • dtse9u盘是什么牌子的(u盘dts和dtkn有什么区别)

    dtse9u盘是什么牌子的(u盘dts和dtkn有什么区别)

  • iphone8有128g吗(iphone 8有128g吗)

    iphone8有128g吗(iphone 8有128g吗)

  • 苹果x和苹果11pro一样大吗(苹果x和苹果11pro参数对比)

    苹果x和苹果11pro一样大吗(苹果x和苹果11pro参数对比)

  • 苹果手机怎么更新系统(苹果手机怎么更新版本ios13)

    苹果手机怎么更新系统(苹果手机怎么更新版本ios13)

  • 手机流量怎么给台式电脑用(手机流量怎么给别的手机用)

    手机流量怎么给台式电脑用(手机流量怎么给别的手机用)

  • 天猫魔盒怎么关闭自动升级(天猫魔盒怎么关闭)

    天猫魔盒怎么关闭自动升级(天猫魔盒怎么关闭)

  • 苹果5有没有录屏功能(苹果5有没有录制屏幕)

    苹果5有没有录屏功能(苹果5有没有录制屏幕)

  • 为什么无线蓝牙耳机只能连一个(为什么无线蓝牙耳机充不进去电)

    为什么无线蓝牙耳机只能连一个(为什么无线蓝牙耳机充不进去电)

  • 微信运动一万步多少公里(微信运动一万步相当于多少公里)

    微信运动一万步多少公里(微信运动一万步相当于多少公里)

  • qq怎么设置自动回复赞(qq怎么设置自动回复消息)

    qq怎么设置自动回复赞(qq怎么设置自动回复消息)

  • oppoa5特殊功能(oppoa5特殊功能介绍)

    oppoa5特殊功能(oppoa5特殊功能介绍)

  • 苹果电池健康多少要换(苹果电池健康多久掉一次正常)

    苹果电池健康多少要换(苹果电池健康多久掉一次正常)

  • 安装其他语言后文件乱码(安装额外语言)

    安装其他语言后文件乱码(安装额外语言)

  • 核心圈好图书推荐(二)(核心书评价格)

    核心圈好图书推荐(二)(核心书评价格)

  • java队列抛出异常的介绍(java队列用法)

    java队列抛出异常的介绍(java队列用法)

  • Python中如何使用replace()方法实现字符串内部替换?(python的用途)

    Python中如何使用replace()方法实现字符串内部替换?(python的用途)

  • 小规模纳税人定期定额征收的怎么报税
  • 建筑业增值税税率2022
  • 免税申报表里的免税销售额是不含税
  • 公积金贷款金额少怎么办
  • 固定资产一次性扣除政策文件
  • 外国人在中国工作签证
  • 母公司给子公司开票会有税务风险吗
  • 企业接受捐赠的账务处理
  • 火车票补票报销流程
  • 材料款付款流程
  • 银行承兑汇票怎么填写
  • 如何处理没有录音的人
  • 盐酸编号
  • 什么是简易征收办法征收增值税
  • 小规模纳税人和小微企业区别
  • 企业外币交易会计核算方法
  • 代扣代缴的社保需要计提吗
  • 单位汽车按揭贷款怎么贷
  • 个税所得期和所得税区别
  • 分支机构注销留抵税额可以税前扣除吗?
  • 微软发布Windows 10正式版 新浪
  • 融资租赁货车
  • ubuntu系统怎么安装微信
  • adv举例
  • 小规模纳税人多久缴纳一次增值税
  • 固定资产账面价值是什么意思
  • cmt.exe病毒
  • hkc中文是什么意思
  • PHP生成静态页面
  • php is_writable
  • 离退休干部书报费有关文件
  • php imagettftext
  • 图像质量评价指标及方法 图像工程
  • node 卸载
  • 建筑企业安装水电过程中很难发现的潜在问题
  • Element UI - v-infinite-scroll无限滚动组件
  • ros机器人自主导航中膨胀地图图层的颜色
  • 微信小程序开发公司
  • spring boot整合hibernate
  • 现金溢余和短缺的会计分录
  • 代发工资怎么做
  • 软件开发增值税即征即退政策
  • 资产处置损益是什么类
  • 专家咨询费比例不能超过多少
  • 一般纳税人申请条件
  • 单位全额承担社保能税前扣除吗
  • 无票收入增值税怎么申报
  • 小型数据库软件有哪些
  • 设备维修会计分录如何写
  • 工会经费计提基数包括奖金吗
  • 红冲暂估原材料如何做会计分录
  • 劳务费无发票怎么处理
  • 收到招聘费发票怎么做账
  • 售楼部大楼
  • 财务费用在贷方表示增加还是减少
  • 生育津贴领取条件及流程
  • 未分配利润可以转盈余公积吗
  • 以前年度调整要更正申报吗
  • 微软安装环境
  • win8无法修复你的电脑
  • 如何解决win10系统安装不兼容驱动的问题
  • 在ubuntu中安装虚拟机
  • ias.exe是什么程序
  • window10虚拟系统
  • windowsqq截屏
  • 苹果官网
  • linux比较两个文件的差异
  • win7 64位旗舰版电脑如何取消网页自动保存密码?win7取消自动保存网页密码的方法
  • 怎么提升win7性能
  • Win10年度更新将统一Insider与Xbox One预览体验
  • cocoscreator分包
  • opengl怎么学
  • 批处理获取文件夹内文件名
  • Vuforia unity3d 发布 eclipse工程
  • unity接收数据
  • Javascript字符串对象函数
  • string和stringbuffer创建后都可以修改
  • 税务局服务大厅办办退税要身份证复印件吗
  • 江苏电子税务局官网登录入口
  • 起诉公司需要法人信息吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设