天天看點

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 inverse

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

print(invert_dict(d))      

輸出:

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

散清單

我們在之前的BLOG裡學過,字典是通過散清單的方式實作的,這意味着鍵必須是可散列的。

散列是一個函數,接受(任意類型)的值并傳回一個整數,字典使用這些被稱為散列值的整數來儲存和查找鍵值對。