python观察日志(part1)--字典反向查找

网友投稿 401 2022-08-31


python观察日志(part1)--字典反向查找

学习笔记,有错必纠

反向查找

给定一个字典d,找到键k对应的值v=d[k]非常容易,但是如果我们有值v,而想到键k该咋整呢?

因为可能存在多个键k映射到同一个值v上,所以,我们可以挑选其中一个键k作为返回值,或者建立一个列表保存所有的键k。

python实现:

def reverse_lookup(d, v): for k in d: if d[k] == v: return k raise LookupError()d = {'a':1, 'c':2, 'e':2, 'f':1, 't':1}print(reverse_lookup(d, 2))

输出:

c

反转字典

构造一个反转字典函数,将目标字典中具有相同值的键放在一个列表中,并将其作为新字典的值,新字典的键就是目标字典的值。

python实现:

def invert_dict(d): inverse = dict() for key in d: val = d[key] if val not in inverse: inverse[val] = [key] else: inverse[val].append(key) return inversed = {'a':1, 'c':2, 'e':2, 'f':1, 't':1}print(invert_dict(d))

输出:

{1: ['a', 'f', 't'], 2: ['c', 'e']}

散列表

我们在之前的BLOG里学过,字典是通过散列表的方式实现的,这意味着键必须是可散列的。

散列是一个函数,接受(任意类型)的值并返回一个整数,字典使用这些被称为散列值的整数来保存和查找键值对。

这套系统当键不可变时,可以正常工作。但是,如果键像列表那样,是可变的话,则会有不好的事情发生。例如,新建一个键值对时,Python将键进行散列并存储到对应的地方,如果修改了作为键的列表,并再次散列,它会指向一个不同的地方。在那种情况下,会导致同一个键有两个条目,或者可能找不到某个键。最终结果,都是导致字典无法正常工作。

因此键必须是可散列的,而类似列表这样的可变类型是不可散列的。同样,因为字典是可变的,它也不能用作键,但可以用作字典的值。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python观察日志(part8)--文件名和路径
下一篇:springboot中请求路径配置在配置文件中详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~