Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Python字典值中查找公共项?_Python_Set - Fatal编程技术网

如何从Python字典值中查找公共项?

如何从Python字典值中查找公共项?,python,set,Python,Set,喂,我有一本字典D: D = {'A': {1, 2, 3}, 'B': {2, 4, 5}, 'C': {1, 2, 7}} 现在我想得到D的值中的所有公共项,即2。 我试图使用set.intersection,但没有成功。简单地说,使用set的方法: >>> set.intersection(*D.values()) {2} D.values()将返回已设置的词典值列表,然后*D.values()将解压此列表并将其传递给集合的方法类如果您只在每个字典中查找公共值,而不在

喂,我有一本字典
D

D = {'A': {1, 2, 3}, 'B': {2, 4, 5}, 'C': {1, 2, 7}}
现在我想得到
D
的值中的所有公共项,即2。 我试图使用
set.intersection
,但没有成功。

简单地说,使用
set
的方法:

>>> set.intersection(*D.values())
{2}

D.values()
将返回已设置的词典值列表,然后
*D.values()
将解压此列表并将其传递给
集合的
方法
类如果您只在每个字典中查找公共值,而不在每个字典中查找值,则以下代码将起作用!不是说这是最快或最好的方法,但它是有效的!
返回嵌入DICT中所有重复值的列表

def findCommon(data):

    flipped = {}
    out = []

    for i in data:
        for value in data[i]:
            if value not in flipped:
                flipped[value] = [i]
            else:
                flipped[value].append(i)
    for i in flipped:
        if len(flipped[i]) > 1:
            out.append(i)
    return out

为了多样性,您还可以使用
reduce()


是Python 2.x中的内置函数,但需要从Python 3.x中的模块导入。

如果使用
reduce
最有效的方法是使用
运算符。和

from functools import reduce
from operator import and_

D = {'A': {1, 2, 3}, 'B': {2, 4, 5}, 'C': {1, 2, 7}}

print(reduce(and_, D.values()))
但是
set.cross
将很难击败:

In [89]: from functools import reduce

In [90]: from operator import and_

In [91]: timeit reduce(lambda x, y: x & y, D.values())
1000 loops, best of 3: 221 µs per loop

In [92]: timeit reduce(and_,D. values())
10000 loops, best of 3: 170 µs per loop

In [93]: timeit set.intersection(*D.values())
10000 loops, best of 3: 155 µs per loop

reduce
在Python3+中可用吗?@IronFist:在Python3.x中,您需要在functools import reduce中说
In [89]: from functools import reduce

In [90]: from operator import and_

In [91]: timeit reduce(lambda x, y: x & y, D.values())
1000 loops, best of 3: 221 µs per loop

In [92]: timeit reduce(and_,D. values())
10000 loops, best of 3: 170 µs per loop

In [93]: timeit set.intersection(*D.values())
10000 loops, best of 3: 155 µs per loop