Python 如何在一个字典中比较两个不同的值(数组)?

Python 如何在一个字典中比较两个不同的值(数组)?,python,dictionary,compare,Python,Dictionary,Compare,我想比较字典中的两个值(它们是列表),如果它们至少有一个公共元素,我将它们的键作为元组。就我而言,(k1,k2)和(k2,k1)之间没有区别。 是我干的。但问题是我的数据量很大,而且这种方式非常慢 paths = {0:[1,2,3,4],1:[2,5,6],3:[5,8,9],4:[1,3,4]} edges = [] for k1,v1 in paths.items(): for k2,v2 in paths.items(): if not k1 ==

我想比较字典中的两个值(它们是列表),如果它们至少有一个公共元素,我将它们的键作为元组。就我而言,(k1,k2)和(k2,k1)之间没有区别。 是我干的。但问题是我的数据量很大,而且这种方式非常慢

paths = {0:[1,2,3,4],1:[2,5,6],3:[5,8,9],4:[1,3,4]}
edges = []
for k1,v1 in paths.items():
        for k2,v2 in paths.items():
            if not k1 == k2:
                if [value for value in v1 if value in v2] != []:
                        edges.append((k1,k2))
我的愿望输出:
[(0,1)、(0,4)、(1,3)]

我从代码中获得的输出:
[(0,1)、(0,4)、(1,0)、(1,3)、(3,1)、(4,0)]

使用此方法,每次比较只进行一次:

导入itertools
路径={0:[1,2,3,4],1:[2,5,6],3:[5,8,9],4:[1,3,4]}
边=[]
对于itertools.组合中的K个耦合(路径,2):
如果[路径中的值的值[k倍[0]]如果路径中的值[k倍[1]]!=[]:
edges.append(k个)