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

  • 小米电视语音唤醒功能怎么设置(小米电视语音唤醒没反应)

    小米电视语音唤醒功能怎么设置(小米电视语音唤醒没反应)

  • win10时间同步在哪

    win10时间同步在哪

  • 微信打不开怎么回事(微信打不开怎么办)

    微信打不开怎么回事(微信打不开怎么办)

  • mate30跑分是多少

    mate30跑分是多少

  • 苹果x怎么让视频全屏(苹果x怎么让视频播放小窗口)

    苹果x怎么让视频全屏(苹果x怎么让视频播放小窗口)

  • 小米8怎么拍出长曝光照片(小米8怎么拍出星星)

    小米8怎么拍出长曝光照片(小米8怎么拍出星星)

  • qcy左右耳配对不上(qcy耳机左右耳不匹配)

    qcy左右耳配对不上(qcy耳机左右耳不匹配)

  • 网盘共享文件保存不了(网盘共享的文件怎么保存)

    网盘共享文件保存不了(网盘共享的文件怎么保存)

  • blued被对方拉黑会怎样(blued被对方拉黑没访问记录)

    blued被对方拉黑会怎样(blued被对方拉黑没访问记录)

  • ppt文件格式类型(ppt的文件类型)

    ppt文件格式类型(ppt的文件类型)

  • 苹果商店无法处理您的购买(苹果商店显示无法购买是为啥)

    苹果商店无法处理您的购买(苹果商店显示无法购买是为啥)

  • 哈罗单车调度费不交有啥后果(哈罗单车调度费是什么意思)

    哈罗单车调度费不交有啥后果(哈罗单车调度费是什么意思)

  • 笔记本mx350显卡什么级别(笔记本mx350显卡可以换吗)

    笔记本mx350显卡什么级别(笔记本mx350显卡可以换吗)

  • 快手押金500可以退吗?(快手交押金多久可以卖东西)

    快手押金500可以退吗?(快手交押金多久可以卖东西)

  • 音响中英文语音切换(音响中英文语音怎么设置)

    音响中英文语音切换(音响中英文语音怎么设置)

  • 保存与另存为的区别(保存与另存为的区别和联系有哪些)

    保存与另存为的区别(保存与另存为的区别和联系有哪些)

  • 照片生成pdf是什么意思(把照片生成pdf格式文件的软件)

    照片生成pdf是什么意思(把照片生成pdf格式文件的软件)

  • 苹果11哪年上市中国的(苹果11哪年上市时间有几款)

    苹果11哪年上市中国的(苹果11哪年上市时间有几款)

  • iphone6小圆点怎么设置(iphone6小圆点怎么打开)

    iphone6小圆点怎么设置(iphone6小圆点怎么打开)

  • ps怎么删除图片的一部分(ps怎么删除图片白色背景)

    ps怎么删除图片的一部分(ps怎么删除图片白色背景)

  • 微信登录的微博怎么注销(微信登录的微博怎么改成手机号登录)

    微信登录的微博怎么注销(微信登录的微博怎么改成手机号登录)

  • qq里的扩列什么意思(qq扩列什么用)

    qq里的扩列什么意思(qq扩列什么用)

  • 酷我音乐付费到期后还能听吗(酷我音乐付费到几点结束)

    酷我音乐付费到期后还能听吗(酷我音乐付费到几点结束)

  • 抖音被关进小黑屋了 发不了作品怎么办(抖音被关进小黑屋怎么解封账号)

    抖音被关进小黑屋了 发不了作品怎么办(抖音被关进小黑屋怎么解封账号)

  • 红屏是什么意思(红屏啥意思)

    红屏是什么意思(红屏啥意思)

  • 主机推不动喇叭的表现(主机推不动喇叭怎么回事)

    主机推不动喇叭的表现(主机推不动喇叭怎么回事)

  • 中国code是多少(中国代码是多少)

    中国code是多少(中国代码是多少)

  • 抖音删了怎么恢复(抖音删了怎么恢复?)

    抖音删了怎么恢复(抖音删了怎么恢复?)

  • Cookie和Session详解(cookie与session的作用和原理)

    Cookie和Session详解(cookie与session的作用和原理)

  • 小规模收到专票怎么处理
  • 居间费用如何纳税
  • 个人所得税综合税率表2023
  • 律师异地立案费用
  • 少数股东损益是
  • 现金流量表利息费用怎么算
  • 文化服务费内容是什么
  • 增值税 抵扣联
  • 加计扣除要交所得税嘛
  • 建筑行业异地工资怎么算
  • 纳税表不得抵扣什么意思
  • 应交增值税减免税款怎么结转
  • 政府性搬迁补偿收入的税务处理
  • 高危职业人身意外险
  • 股票投资及收益计算公式
  • 产品成本的归集和分配是什么意思
  • 同一地级行政区范围内举例
  • 不增税、免税、零税率的差异
  • 维修费属于哪个类别
  • 个体户可以不领税控盘吗
  • 农民专业合作经济组织可以贷款吗
  • 扶贫贷款主要指
  • 小规模企业增值税税率是多少
  • 计提个税会计科目怎么做
  • 劳务工程款和工人工资的区别
  • 火车票进项税在哪里认证
  • mac怎么还原出厂设置
  • 产值和营业收入差距大
  • win11系统设置快捷键
  • 期间费用的含义
  • 固定资产残料收税吗
  • 原版锯齿
  • 受托方代扣代缴的消费税计入什么科目
  • 企业清算期间会计分录
  • 数据结构考试内容
  • php对接第三方支付教程
  • php访问sqlserver
  • 民间非营利组织如何纳税
  • 收到销售方的负债怎么办
  • 决算清理期和库款报解整理期
  • 库存盘点差异会计分录
  • 进项不认证有什么风险
  • 进项发票无法取消怎么办
  • 运输费用会计
  • 企业编制现金流量表的主要目的是什么
  • 发票备注栏必须写吗
  • mysql配置文件my.ini如何配置
  • 库存商品怎么结转收入
  • 企业合并财务报表
  • 收到税局退款
  • 普通发票怎么冲红字
  • 进项税留抵税额是什么意思
  • 跨年发生退货
  • 发票怎么跨月作废申请
  • 原材料暂估差异调整
  • 预收账款科目账龄怎么算
  • 事业单位会计岗位属于哪一类
  • 商品流通企业进货费用
  • mysql8.0免安装
  • mysql连接时间长怎么优化
  • mysql查看使用情况
  • win10系统微软账号退不了怎么办
  • ubuntu怎么设置开机自启动程序
  • secbizsrv.exe是什么程序
  • ubuntu 网络设置命令
  • centos 安装
  • Windows更新失败
  • windows中的服务
  • 如何查看windows8.1版本
  • windows屏蔽网络设置的方法不包括以下哪种
  • linux系统怎么访问网页
  • window10系统连接wifi
  • 横版格斗rpg手游
  • 初始化opengl时出错
  • python3 urllib模块
  • nodejs使用视频教程
  • JavaScript中的复杂数据类型又称为
  • 广州地税局官网办事点
  • 国税周末有值班的吗
  • 注销一般户需要基本户的开户许可证吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设