Как сравнить два разных значения (массив) в одном словаре? - PullRequest
0 голосов
/ 17 июня 2020

Я хочу сравнить два значения (это списки) в словаре, и если у них есть хотя бы один общий элемент, я беру их ключи как кортеж. для моей цели нет разницы между (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)]

1 Ответ

1 голос
/ 17 июня 2020

Используйте 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...