1. 程式人生 > >對字典的一些常規操作:遍歷字典並列印,字典反向查詢,反轉字典

對字典的一些常規操作:遍歷字典並列印,字典反向查詢,反轉字典

操作1:如何分別得到key,value集合:
方法dict.keys() 、dict .values() 分別得到鍵 、值的集合物件,使用list()函式可將該物件型別變為list。

操作2:如何迴圈並列印一個字典裡的鍵值對:

c_2 = histrogram_2(s)
for key in sorted(s):
    print(key,c_2[key])

操作3:如何迴圈並列印一個字典裡的鍵值對:
目標:通過V找K
思路:遍歷整個字典,當找到對應的value時返回key

def lookup(dic, value):
    for k in dic:
        if dic[k] == value:
            return key
    raise LookupError()

print(lookup(c_2, 42))

操作4:反向查詢
目標:通過value查詢key值
思路:定義函式,形參兩個:字典和值,遍歷整個字典尋找尋找是否有dict(key) == value,若存在返回第一個key,否則用raise語句生成一個異常。

def reverse_lookup(dic, value):
    for k in dic:
        if dic[k] == value:
            return key
    raise LookupError()
    
print(lookup(c_2, 42))  # 在c_2字典中去尋找42對應的KEY是啥

改良:反向查詢所有的key值

def reverse_lookup2(dic,value):
	keys = []
	for k, v in dic.items():
		if v == value:
			keys.append(k)
	return keys

反向查詢的速度會遠遠慢於正向查詢,由於字典的keys是通過雜湊演算法產生散列表,因此正向查詢採取二分法查詢會非常快,而反向查詢則遍歷了整個字典,當字典非常大時,對程式的效能影響會特別大。

操作5:反轉字典
目標:
將一個字典裡的keys 與 values對調
思路:
1、定義函式,一個形參為字典
2、函式內定義一個新的反轉字典
3、通過for迴圈將鍵值對調
①Q1.字典內key唯一,value不唯一,對調後一個value可能對應多個值
②Q2.如何實現鍵值對調
4、返回反轉字典

def invert_dict(d):
	inverse_d = dict()
		for k in d:  # 對字典使用for loop,會直接遍歷字典的所有鍵
			if d[k] not in inverse_d:  
				inverse_d[d[k]] = [k]  # 第一次新建鍵值對,value型別為list,並存入inverse_d中
			elif d[k] in inverse_d:  
				inverse_d[d[k]].append(k)  # 將原字典的key直接加入list中
		return inverse_d