下面是我的代码,任何人都可以通过使用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 是大字典
感谢
答案 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']
作为输出。