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

  • QQ的超级QQ秀怎么关(qq的超级qq秀怎么捏脸好看)

    QQ的超级QQ秀怎么关(qq的超级qq秀怎么捏脸好看)

  • 华为nova4带无线充电吗(华为nova4无线充电怎么开启)

    华为nova4带无线充电吗(华为nova4无线充电怎么开启)

  • 建立一个计算机网络需要网络硬件设备和(建立计算机工作组)

    建立一个计算机网络需要网络硬件设备和(建立计算机工作组)

  • iphone降低白点值坏处(iphone降低白点值默认是开启还是关闭)

    iphone降低白点值坏处(iphone降低白点值默认是开启还是关闭)

  • 举报双封号是什么意思(举报双封号是什么意思 视频)

    举报双封号是什么意思(举报双封号是什么意思 视频)

  • beatssolo3怎么关机(beatssolo3怎么关闭灯光)

    beatssolo3怎么关机(beatssolo3怎么关闭灯光)

  • 联发科mt6771v等于骁龙多少(联发科mt6775)

    联发科mt6771v等于骁龙多少(联发科mt6775)

  • 华为畅享11什么时候上市(华为畅享什么系统)

    华为畅享11什么时候上市(华为畅享什么系统)

  • 如何把超时的消息撤回(超出时间如何撤回)

    如何把超时的消息撤回(超出时间如何撤回)

  • 苹果xr内存有几个版本(苹果xr的内存多少)

    苹果xr内存有几个版本(苹果xr的内存多少)

  • 华为nova7支持nfc吗(华为nova7支持nfc吗?)

    华为nova7支持nfc吗(华为nova7支持nfc吗?)

  • 苹果手机原图怎么发(苹果手机原图怎么看地理位置)

    苹果手机原图怎么发(苹果手机原图怎么看地理位置)

  • 小米10pro怎么截屏(小米10pro怎样截屏)

    小米10pro怎么截屏(小米10pro怎样截屏)

  • qq对方未接听什么意思(qq对方未接听啥意思)

    qq对方未接听什么意思(qq对方未接听啥意思)

  • 小米9支持18w快充吗(小米9最快支持多少w)

    小米9支持18w快充吗(小米9最快支持多少w)

  • 抖音移除粉丝能恢复吗(抖音移除粉丝能发私信吗)

    抖音移除粉丝能恢复吗(抖音移除粉丝能发私信吗)

  • 为什么手机4g变成3g了(为什么手机4G变2G信号)

    为什么手机4g变成3g了(为什么手机4G变2G信号)

  • 京东取消订单能恢复吗(京东取消订单能退定金吗)

    京东取消订单能恢复吗(京东取消订单能退定金吗)

  • OPPO k5相机卡屏怎么办(oppor15打开相机会卡)

    OPPO k5相机卡屏怎么办(oppor15打开相机会卡)

  • iphone更新运营商(iphone更新运营商设置有什么用)

    iphone更新运营商(iphone更新运营商设置有什么用)

  • 美图手机丢了怎样追踪(美图手机丢了怎么查定位)

    美图手机丢了怎样追踪(美图手机丢了怎么查定位)

  • iqoo压感按键怎么用(iqoo压感按键怎么关闭震动)

    iqoo压感按键怎么用(iqoo压感按键怎么关闭震动)

  • 会声会影如何导出mp4(会声会影如何导入字幕文件)

    会声会影如何导出mp4(会声会影如何导入字幕文件)

  • mate10熄屏时间设置

    mate10熄屏时间设置

  • 小爱音箱怎么控制电视(小爱音箱怎么控制窗帘)

    小爱音箱怎么控制电视(小爱音箱怎么控制窗帘)

  • 百度云怎么投屏到电视(百度云怎么投屏不了)

    百度云怎么投屏到电视(百度云怎么投屏不了)

  • lvscan命令  扫描LVM逻辑卷(linux扫描命令)

    lvscan命令 扫描LVM逻辑卷(linux扫描命令)

  • 什么叫抵扣进项
  • 外商投资的企业是民营企业吗
  • 免税增值税的有哪几项
  • 股票价值和内部价值
  • 政府奖励企业如何申请
  • 一般纳税人用金蝶新建账套用什么会计制度好
  • 买什么样的房子可以贷款
  • 股权增值转让的财税处理
  • 铁路运输发票的开具要求
  • 供应商转让合同
  • 会计去报税流程
  • 国税是负税需要缴税吗
  • 当月增次月是什么意思
  • 工伤保险费发票
  • 企业所得税税前不得扣除的项目
  • 并购重组协议样本
  • 服务费与劳务费税率的区别
  • 长期股权投资的初始计量
  • 企业的免税收入用于支出所形成的费用或财产
  • 少收的货款怎么入账
  • 调整上年度多计提费用
  • 员工旅游计入什么费用
  • window10最新激活码
  • 经营性租赁 会计准则
  • w7系统怎么用
  • 提前退休的一次性补贴收入
  • php数组函数,选班长
  • 资金占用利息会计处理
  • 总部资产的减值有什么特点
  • 以太网默认网关不可用
  • Wat Chaloem Phra Kiat Phrachomklao Rachanusorn的浮庙,泰国南邦 (© pa_YON/Getty Images)
  • 增值税检查的内容
  • yolov3模型训练
  • Code For Better 谷歌开发者之声——初识Web与谷歌,拉起兴趣之心。
  • 农产品免税发票可以抵扣增值税吗
  • 发票申请条件
  • 公司目前销售使用的物品
  • 已核销的坏账又收回会计分录
  • 制造费用分配后总账月末余额在哪方?
  • 医疗机构销售药品是否征收增值税
  • 不入库存商品直接走成本会怎样
  • 数据库系统中,用户通过什么访问数据
  • 商家下单
  • 什么是住房补贴,住房补贴如何办理?
  • 先收款后给发票合法吗
  • 企业资金占用费利率
  • 跨年的应收账款多做了怎么做账
  • 以前年度损益调整账务处理分录
  • 建筑业外包工程包括哪些
  • 企业给员工租的公寓
  • 对公账户怎么打印
  • 账务调整的原则
  • 内部无形资产交什么税
  • 其他流动资产
  • 暂估成本对冲分录怎么写
  • 总分类账户和明细分类账户平行登记的要点包括
  • 投资回报怎么写
  • 债权人接受债务怎么处理
  • mysql id in
  • win7系统怎样
  • windows8自动更新卡住了怎么办
  • u盘发光
  • 如何解决cpu超频问题
  • linux操作系统百度百科
  • 使用移动硬盘快速启动
  • windows7包含6个版本其中什么最强大支持的功能最多
  • rsrcmtr.exe - rsrcmtr是什么进程 有什么用
  • win10脱机使用
  • win7系统运行红警黑屏有声音
  • win8电脑d盘不见了怎么恢复
  • Windows 8 Consumer Preview 中的新热键介绍
  • python中元组和列表
  • perl正则表达式
  • Node.js中的核心模块包括哪些内容?
  • nodejs如何配置环境变量
  • unity rp
  • jquery弹出窗口
  • jQuery处理XML文件的几种方法
  • android图片适配方法
  • 国家税务局河南省税务总局官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设