Python 3多字典键的交集

2024-06-16 13:08:28 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的代码,有谁可以帮我用python3内置库函数来优化流程?在

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都是大字典
谢谢


Tags: 代码流程keys内置tmppython3listset
2条回答

如果您只需要所有字典中所有键的列表,那么可以使用dict.viewkeys()(对于python2.7)或python3.x中的dict.keys()来获取dictionary视图对象,然后将它们相交。在

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

对于python2.7,使用Dict1.viewkeys()等,而不是.keys()。在


如果您有一个字典列表,使用functools.reduce()函数在一行中完成此操作的一种方法是-

^{pr2}$

类似的逻辑,使用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,并且在所有三个dict中查找每个条目。如果它存在,它将被添加到列表中。您将获得:

^{pr2}$

作为输出。在

相关问题 更多 >