位置: 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我的收藏在哪里电脑)

  • word合并段落怎么设置(word合并段落后采用什么格式)

    word合并段落怎么设置(word合并段落后采用什么格式)

  • 华为手机电池补电代码(华为手机电池补电号码)

    华为手机电池补电代码(华为手机电池补电号码)

  • 显示屏vga什么意思(显示屏的vga)

    显示屏vga什么意思(显示屏的vga)

  • 电话拉黑与免打扰区别(无视拉黑打电话)

    电话拉黑与免打扰区别(无视拉黑打电话)

  • 微信怎么弄深色模式(微信怎么弄深色模式vivoy66)

    微信怎么弄深色模式(微信怎么弄深色模式vivoy66)

  • x30与x30pro区别(x3和x30pro的区别)

    x30与x30pro区别(x3和x30pro的区别)

  • 开启免打扰对方知道吗(开启免打扰对方打电话来会怎样)

    开启免打扰对方知道吗(开启免打扰对方打电话来会怎样)

  • ipad现在是第几代了(ipad现在是第几代了2022)

    ipad现在是第几代了(ipad现在是第几代了2022)

  • 快充和慢充有什么区别(快充和慢充有什么优缺点)

    快充和慢充有什么区别(快充和慢充有什么优缺点)

  • v1818ct是什么手机(v1818ct手机价格)

    v1818ct是什么手机(v1818ct手机价格)

  • word文档怎么纵向排版(word文档怎么纵向打字)

    word文档怎么纵向排版(word文档怎么纵向打字)

  • 华为手机快手怎么没有小黄车(华为手机快手怎么k歌)

    华为手机快手怎么没有小黄车(华为手机快手怎么k歌)

  • 苹果手机怎么传送照片(苹果手机怎么传到安卓手机)

    苹果手机怎么传送照片(苹果手机怎么传到安卓手机)

  • 手机蓝牙怎么连接汽车蓝牙导航(手机蓝牙怎么连接不上)

    手机蓝牙怎么连接汽车蓝牙导航(手机蓝牙怎么连接不上)

  • 微信退群有提示吗(微信退群有提示吗知乎)

    微信退群有提示吗(微信退群有提示吗知乎)

  • 苹果11怎么使用自己的铃声(苹果11怎么使用nfc坐地铁)

    苹果11怎么使用自己的铃声(苹果11怎么使用nfc坐地铁)

  • facetime怎么不能使用(FaceTime怎么不能打开摄像头)

    facetime怎么不能使用(FaceTime怎么不能打开摄像头)

  • 魅族flyme8体验版什么时候推送(魅族flyme8.1稳定版)

    魅族flyme8体验版什么时候推送(魅族flyme8.1稳定版)

  • 如何查连接自己热点的人(怎么查连接)

    如何查连接自己热点的人(怎么查连接)

  • 咸鱼违规记录怎么消除(咸鱼违规记录怎么申诉)

    咸鱼违规记录怎么消除(咸鱼违规记录怎么申诉)

  • pixiv打不开(pixiv打不开图片)

    pixiv打不开(pixiv打不开图片)

  • 陌陌卸载了聊天记录能查吗(陌陌卸载了聊天记录怎么找回)

    陌陌卸载了聊天记录能查吗(陌陌卸载了聊天记录怎么找回)

  • 华为m5青春版怎么截屏(华为m5青春版怎么恢复出厂设置)

    华为m5青春版怎么截屏(华为m5青春版怎么恢复出厂设置)

  • 电脑每次开机都回到初始状态解决方法(电脑每次开机都要选择系统怎么办)

    电脑每次开机都回到初始状态解决方法(电脑每次开机都要选择系统怎么办)

  • JS类型转换(js如何转换为数值型)

    JS类型转换(js如何转换为数值型)

  • Python 人脸识别系统

    Python 人脸识别系统

  • 从价计税消费税计算公式
  • 中级会计实务主观题
  • 业务招待费进项
  • 民办学校房屋要求
  • 报表净利润是亏损可弥补数吗
  • 闲置固定资产如何做账
  • 红字发票需要认证吗之前的发票还有用吗
  • 母公司捐赠资金给子公司
  • 成品油跨月发票红字冲销步骤
  • 旅行社团队意识
  • 销售产品货款存入银行是什么凭证
  • 收到退款如何做账
  • 汇算清缴亏损在后期弥补时怎么做会计处理?
  • 长期待摊费用新规定
  • 收到发票错误主管有责任吗
  • 利润的计算方法数学
  • 农产品一般纳税人免税吗
  • 公户转账给个人没有票
  • 企业以前年度的亏损在哪查
  • 当年亏损可以用以前年度来弥补吗
  • 对外工程承包企业
  • 增值税普通发票和普通发票的区别怎么交税
  • 个人所得税适合月度税率表有哪些
  • 出口报关单中有哪些内容
  • 管理费用没发票能入账吗
  • 宽带测速器在线测速
  • 债务优化是做什么的工作
  • 购买农产品没有承担增值税为什么还要计算抵扣
  • 通过mac地址查找ip的协议
  • php运用
  • 增值税纳税申报表在哪里打印
  • php curl_exec
  • 审稿意见范例
  • 人工智能机器人保姆什么时候实现
  • 网络模型参数方法
  • [深度学习] 基于切片辅助超推理库SAHI优化小目标识别
  • javascript控制语句
  • hash操作
  • 真发票假业务会坐牢吗
  • 如何扣除企业接单费用
  • sqlserver数据类型转换函数
  • 增值税发票的规范
  • sql2008使用教程
  • sqlserver 数据迁移
  • 调整后财务报表
  • 主办会计的工作内容和职责
  • 以产品偿还债务怎么算
  • 以货物抵应收账款的分录
  • 当月工资总额如何计算
  • 4s店收到红字发票怎么开
  • 社保可以不计提账务处理
  • 税控盘全额抵扣怎么做分录
  • 会计结转是什么意思
  • mysql min
  • win10搜索类型
  • pe工具箱怎么用
  • 如何用pe弄双系统引导
  • Windows7更改用户名
  • xp系统ie浏览器怎么升级
  • winton
  • win8microsoft账户
  • linux 消耗内存命令
  • win7无法识别usb设备怎么办 五大方法来解决
  • win8能不能玩gta5
  • cocos2dx运行原理
  • jquery手风琴折叠菜单
  • html网站首页
  • android仿qq聊天
  • node js 开发
  • Unity UIScrollView优化
  • js复制div
  • nodejs co
  • boostrapping
  • 初识大学主题征文
  • 置顶高站位
  • jquery showdialog
  • 由简入繁是成语吗
  • 江苏电子税务局客服电话
  • 怎么删除天眼查的判决文书
  • 河北社保网上申报时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设