Сравните списки в разных словарях и сопоставьте сходства - PullRequest
1 голос
/ 17 июня 2019

Я хотел бы сравнить списки, принадлежащие разным словарям, и распечатать, если есть какие-либо сходства

dictionary = { 'C1' : [10,20,30], 'C2' : [20,30,40]}
dictionarya = { 'S1' : [10,21,31], 'S2' : [22,32,42]}

print ('You have...')
for f, v in zip(dictionary, dictionarya):
    for x, y in zip(f, v):
        if x == y:
            print (x)
            break
else:
      print ('no similarities')

Я ожидаю, что совпадет с 10 из С1 и 10 из S1.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Чтобы раскрыть то, что показывает код U9-Forward: проблема в том, что при zip () двух словарях, которые заархивированы, являются ключами dict.Вы после значений.

Кроме того, else: всегда будет работать, поэтому вам нужно какой-то флаг для отслеживания, если вы когда-либо нашли какие-либо соответствующие значения.

0 голосов
/ 17 июня 2019

Вы можете использовать это выражение генератора с вложенной итерацией с двумя zip s и оператором if и next:

print(next((str(a) + ', ' + str(x[0]) + ', ' + str(y[0]) for x, y in zip(dictionary.items(), dictionarya.items()) for a, b in zip(x[1], y[1]) if a == b), 'no similarities'))

Выход:

10, C1, S1

Но если совпадений нет, так как у меня next, будет выведено:

no similarities
...