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. eclipse opengl java_eclipse openGL glut运行环境配置
  2. docker下gitlab安装配置使用(完整版)
  3. java构造方法 this_Java中的构造方法this、super的用法详解
  4. Docker-compose 常用命令
  5. openEuler Developer Day 启动大会招募环节,报名通道同步开启!
  6. 启动startUML的时候报错“Exception EOleSysError in module StarUML.exe at 000AD559.
  7. 常见卫星汇总--期待大神补充下载地址
  8. Windows XP修改CHM字体大小
  9. 程序员的简历应该如何写?(含模拟面试,持续更新)
  10. mysql基于ssm的自习室座位管理系统 毕业设计源码221118
  11. 磁悬浮框架飞轮磁轴承技术研究与发展现状
  12. 浙江大学软件学院人工智能保研面经2021
  13. html游戏让目标人物移动,如何用html5编写鼠标事件与游戏人物移动
  14. t440p安装黑苹果+win10双系统记录
  15. HDOJ 5498 Tree
  16. 图神经网络(五):GAT
  17. javascript ipz127
  18. Currency Translation in Bex Query Variable 1
  19. C语言新建文件写入数据
  20. 教你如何获取微信公众号历史文章链接

热门文章

  1. heu acm基础训练之1002
  2. 优秀程序员的5个特征,你在第几层?
  3. 查看圆周率 Pi值 Pi的前百位 Pi的前百万位
  4. aigo MP5 视频输出使用方法
  5. python简单心形代码爱情闪字_qq主人寄语闪字代码:完整保存你给的爱
  6. Spring Framework基础知识:依赖注入与面向切面
  7. DVDFab Photo Enhancer AI (AI图片无损放大软件)官方中文版V1.0.2.3 | 图片无损放大器
  8. 【转】CNN+BLSTM+CTC的验证码识别从训练到部署
  9. 如何将AVIF格式转换为JPG格式
  10. 【转】深度完美GhostXP_SP3快速装机优化版V2011.12