当前位置 : 主页 > 编程语言 > python >

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

来源:互联网 收集:自由互联 发布时间:2022-06-15
学习笔记,有错必纠 反向查找 给定一个字典d,找到键k对应的值v=d[k]非常容易,但是如果我们有值v,而想到键k该咋整呢? 因为可能存在多个键k映射到同一个值v上,所以,我们可以挑

学习笔记,有错必纠


反向查找



给定一个字典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 inverse

d = {'a':1, 'c':2, 'e':2, 'f':1, 't':1}

print(invert_dict(d))

输出:

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



散列表



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

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

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

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


上一篇:python观察日志(part8)--文件名和路径
下一篇:没有了
网友评论