Python 3 - 多个字典键的交集

时间:2015-08-06 02:15:49

标签: python python-3.x dictionary key intersection

下面是我的代码,任何人都可以通过使用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 是大字典
感谢

2 个答案:

答案 0 :(得分:2)

如果您只想要所有词典中的所有键列表,可以使用{3.}}(对于Python 2.7)或Python 3.x中的dict.viewkeys()来获取词典视图对象,然后与它们相交。

Python 3.x的示例 -

dict.keys()

对于Python 2.7,使用>>> 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'] 等代替Dict1.viewkeys()

如果您有一个词典列表,使用.keys()函数在一行中执行此操作的一种方法是 -

functools.reduce()

类似的逻辑,使用for循环 -

>>> 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']

答案 1 :(得分:0)

如果我理解你的问题,你就会在所有三个词典中寻找交叉键,对吗?

如果是这种情况,您只需迭代其中一个,过程很简单。

isect = [i for i in Dict1 if all(i in d for d in (Dict1,Dict2,Dict3))]

print(isect)

列表理解迭代一个dict,并且在所有三个dicts中查找每个项目。如果它存在,它将被添加到列表中。你会得到:

['ky2']

作为输出。