[英]Python 3 - intersection of multiple dictionary key
下面是我的代碼,任何人都可以通過使用python 3內置庫函數幫助我優化過程?
Dict1 = {'ky1':1, 'ky2':2,'ky_3':3}
Dict2 = {'ky1':4, 'ky2':5,'ky_4':6}
Dict3 = {'ky2':7, 'ky3':8,'ky_5':9}
D = [Dict1,Dict2,Dict3]
Keys_list = []
for i in D:
tmp = list(i.keys())
Keys_list.append(tmp)
Output = list(set.intersection(*map(set,Keys_list)))
我的Dict1,Dict2,Dict3是大字典
謝謝
如果你只想要所有詞典中所有鍵的列表,你可以在Python 3.x中使用dict.viewkeys()
(對於Python 2.7)或dict.keys()
來獲取字典視圖對象,然后相交他們。
Python 3.x的示例 -
>>> Dict1 = {'ky1':1, 'ky2':2,'ky_3':3}
>>> Dict2 = {'ky1':4, 'ky2':5,'ky_4':6}
>>> Dict3 = {'ky2':7, 'ky3':8,'ky_5':9}
>>>
>>> Dict1.keys() & Dict2.keys() & Dict3.keys()
{'ky2'}
>>> list(Dict1.keys() & Dict2.keys() & Dict3.keys())
['ky2']
對於Python 2.7,使用Dict1.viewkeys()
等代替.keys()
。
如果你有一個字典列表,使用functools.reduce()
函數在一行中執行此操作的一種方法是 -
>>> ld = [{'ky1':1, 'ky2':2,'ky_3':3},{'ky1':4, 'ky2':5,'ky_4':6},{'ky2':7, 'ky3':8,'ky_5':9}]
>>> res = list(reduce(lambda x, y: x & y.keys() , ld))
>>> res
['ky2']
類似的邏輯,使用for循環 -
>>> ld = [{'ky1':1, 'ky2':2,'ky_3':3},{'ky1':4, 'ky2':5,'ky_4':6},{'ky2':7, 'ky3':8,'ky_5':9}]
>>> res = ld.pop()
>>> for d in ld:
... res = res & d.keys()
...
>>> list(res)
['ky2']
如果我理解你的問題,你正在尋找所有三個詞典中的交叉鍵,對吧?
如果是這種情況,您只需迭代其中一個,過程很簡單。
isect = [i for i in Dict1 if all(i in d for d in (Dict1,Dict2,Dict3))]
print(isect)
列表理解迭代一個dict,並且在所有三個dicts中查找每個項目。 如果它存在,它將被添加到列表中。 你會得到:
['ky2']
作為輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.