天天看點

如何快速找到多個字典中的公共鍵

注:本文使用python 3.5.2版本

有時候在統計資料的時候,我們需要知道多個字典的公共鍵。比如學校校運會,統計了某班級參賽學生成績名次:

100米:

{'小明': 1, '李雷': 6, '小李': 17, ...}

鉛球:

{'李雷': 9, '露西': 24, ...}

接力:

{'小李': 2, '露西': 16, '李雷': 5, ...}

現在要統計該有哪些學生同時報了100米,鉛球,接力三項比賽。

一般思路是将這3個字典的鍵做與運算,就能得出公共的鍵:

d1 = {'a': , 'c': , 'g': , 'd': , 'h': }
d2 = {'c': , 'f': , 'd': , 'h': }
d3 = {'b': , 'd': , 'h': }
name = []
for k in d1:
    if k in d2 and k in d3:
        name.append(k)
print(name)     # ['d', 'h']
           

這種方法代碼不夠簡潔,執行效率也不夠好(當字典十分龐大的時候)。

本文主要介紹下面兩種方法:

用集合(set)做交集運算的方式實作公共鍵

# 字典的viewkeys()方法得到字典keys集合
print(d1.keys() & d2.keys() & d3.keys())    # {'d', 'h'}
           

用map和reduce函數實作公共鍵

如果字典比較多的話,用集合的方法寫起來比較繁瑣,可以用map和reduce函數來處理:

from functools import reduce
# map函數得到所有字典keys集合
# reduce函數得到所有字典keys的交集
re = reduce(lambda x, y: x & y, map(dict.keys, [d1, d2, d3]))
print(re)
           

map和reduce函數介紹可以參考廖大的教程:高階函數–map/reduce