0x00 前言

现在有一个字典,需要使用value去索引key。就是把{key: value}这样的字典转换成{value: key},即可达到目的。

0x01 基本概念

正向索引(forward index)

一个普通的字典就是正向索引,正反向是相对的。我们常用的索引格式可以称为正向索引。

比如,水果店的水果要按照种类,给出颜色,这样可以方便设计师根据颜色布置水果的区域,好的布局可以吸引顾客。

具体的数据结构如下:

fruit_color_map ={'apple': 'red','banana': 'yellow','watermelon': 'green','grape': 'purple'
}

反向索引(inverted index)

如果提到倒排索引,有些同学应该会更熟悉,然而LZ并不喜欢倒排索引这个翻译。倒排这个词更像是逆序的同义词,然而字典一般情况下是没有顺序的,而且inverted index跟顺序关系不大。

还是举水果店的例子。

LZ隔几天就回去水果店买水果。不幸的是,LZ有选择困难症,看着各种各样的水果名就眼晕。于是,就跟水果店老板提建议,如果给我可选的颜色,LZ就不会这么纠结了。

于是就有了反向索引的数据结构:

color_fruit_map ={'red': 'apple','yellow': 'banana','green': 'watermelon','purple': 'grape'
}

0x02 一句话翻转

场景一: 1 对 1

python 2.7 版本

color_fruit_map = {v: k for k, v in fruit_color_map.iteritems()}

python 3 版本

color_fruit_map = {v: k for k, v in fruit_color_map.items()}

场景二: 1 对 多

有时候value可能不是一个值,而是一个列表。

fruit_color_map ={'apple': ['red', 'yellow1', 'green1'],'banana': ['yellow2'],'watermelon': ['green2', 'black'],'grape': ['purple']
}

python 2.7 版本

color_fruit_map = {x: k for k, v in fruit_color_map.iteritems() for x in v }

python 3 版本

color_fruit_map = {x: k for k, v in fruit_color_map.items() for x in v }

倒排索引的效果:


color_fruit_map = {"green1": "apple", "green2": "watermelon", "purple": "grape", "yellow2": "banana", "yellow1": "apple", "black": "watermelon", "red": "apple"
}

0x03 问题

在场景二中,可以看到LZ把green分成列green1,和green2。原因很简单,如果green不区分的话,在变成key的时候只会保留一个green,那么apple或者watermelon会丢失其中之一,造成丢数据的问题。

解决丢数据的方法就是,在创建反向索引时,创建列表,append重复的值即可。由于一句话无法表达,LZ这里就不写了。实现起来很简单哈。

0x04 小结

  1. 倒排索引在处理数据中经常用到,通常一句话就能实现反转,so cool
  2. 本文中用到了 二层字典推导试, 第一个for是源,生成的key可以给第二个for使用,顺序需要牢记

0x05 参考文献

https://stackoverflow.com/questions/483666/python-reverse-invert-a-mapping

每天一个python段子(3):一句话创建倒排索引相关推荐

  1. 每天一个python段子(2):一句话http服务器

    0x00 Python版本: python2 ipv4 python -m SimpleHTTPServer 8080 ipv6 python -c "import socket,Socke ...

  2. python怎么新建工程_pycharm新建一个python工程步骤

    小编最近由于工作原因要用到python,一门新的知识需要接触,对于我来说难度还是很大的. python工程目录结构 每次创建一个python工程 PyCharm会创建如下目录 创建时会把python运 ...

  3. python全局变量在哪创建_python设置全局变量

    python中怎么定义全局变量 复制代码 count = 0 def Fuc(count): print count count += 1 for i in range(0, 10): Fuc(cou ...

  4. python入门004~创建属于自己的第一个python3项目~基础知识的讲解

    上一节带领大家成功的安装了pthon3,并且在开发者工具pycharm里配置了python,这一节就开始带领大家学习python3的基础知识了. 如果你还没有安装python3,也没有安装开发者工具p ...

  5. python 元类工厂模式_Python进阶丨如何创建你的第一个Python元类?

    摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类. Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一. ...

  6. 如何创建你的第一个Python元类?

    Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一.通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类.本文介绍 ...

  7. Python进阶丨如何创建你的第一个Python元类?

    摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类. Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一. ...

  8. 第一个程序(python)-helloworld_创建第一个python程序:‘Hello World!’

    安装好python解释器就可以创建第一个仪式程序Helloworld了 1.Python程序的3种运行方式 1.1.Python解释器直接运行 在Windows或者Linux命令行输入python,进 ...

  9. python做的游戏放到微信_【1、 创建一个python的文件,运行后,文字版方式模拟微信游戏“跳一跳?】...

    python脚本学习过程推荐 学习流程: 一:打础 1.找到合适的书籍(推荐Python核心编程2Dive into Python),大致读一次,循环啊判,常用类啊,搞懂(太难的跳过) 2.勤练习py ...

最新文章

  1. 分布式事务之消息补偿解决方案
  2. easyui datagrid表头 toolbar 固定
  3. ASP.NET Core 3.0中使用动态控制器路由
  4. javadocs_不会吸引人的JavaDocs源样本
  5. androidstudio打包apk 文件_Android 缩小apk体积过程记录
  6. [BZOJ4066]简单题
  7. 解决树莓派 no wireless interfaces found问题
  8. 51单片机程序0到60计数个位逢5和6不显示,十位逢1不显示http://www.51hei.com/bbs/mcu-h24-1.html
  9. Python 翻译文章 txt文件
  10. 邓亚萍加盟人民日报社 担任人民搜索一把手
  11. html弹性布局什么意思,弹性布局display:flex是什么意思
  12. led指示灯电路图大全(八款led指示灯电路设计原理图详解)
  13. python模拟登录163邮箱_Python实现模拟登录网易邮箱的方法示例
  14. 四羧基锌酞菁(ZnC4Pc),Zn-taPc 酞菁类化合物,齐岳生物供应酞菁材料
  15. centos ifconfig不显示IP地址解决办法之一(亲测有效)
  16. 366AP微信中可以下载企业包
  17. 去哪儿VS携程产品分析
  18. 输入字符串按ASCⅡ大小排序
  19. i79750h和i510300h差距大不大
  20. 使用加速器可以提升获取Docker官方镜像的速度

热门文章

  1. 虚拟机修改服务器时间,ESXI 6.7系统时间不对,影响内部虚拟机时间,修复及修改方法分享...
  2. angularjs2 mysql_AngularJS2初学小结
  3. SoundTouch音频处理库的简单使用(音调、音速、声道等等)
  4. dnf剑魂buff等级上限_DNF体验服:瞎子实测增伤30%+,皮甲成大赢家,轻甲白字双暴和谐...
  5. 生产可能性边界 凹向原点问题(只是为了保存自己的想法,非相关人员请忽视这篇博客)
  6. 【读过的书】《平凡的世界》
  7. perl @inc问题
  8. 卡牌大师怎么玩_lol10.10版本卡牌大师怎么玩 卡牌天赋出装详解
  9. 【Linux】打包压缩命令
  10. InfluxDB 的聚合类函数