簡體   English   中英

Python 3 - 多個字典鍵的交集

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM