【问题标题】:How can I compare two different values(array) in one dictionary?如何在一本字典中比较两个不同的值(数组)?
【发布时间】:2020-06-17 06:36:36
【问题描述】:

我想比较字典中的两个值(它们是列表),如果它们至少有一个公共元素,我将它们的键作为一个元组。就我而言,(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)]

【问题讨论】:

    标签: python dictionary compare


    【解决方案1】:

    使用itertools.combinations,这样每次比较只做一次:

        import itertools
        paths = {0:[1,2,3,4],1:[2,5,6],3:[5,8,9],4:[1,3,4]}
        edges = []
        for ktuple in itertools.combinations(paths,2):
            if [value for value in paths[ktuple[0]] if value in paths[ktuple[1]]] != []:
                edges.append(ktuple)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多