Как сравнить значения двух разных хеш-карт в python - PullRequest
0 голосов
/ 06 июля 2018

Привет, я пытаюсь понять, как сравнить значения двух разных хеш-карт, которые у меня есть.

hash1 = {'animals':['dogs','cats']}
hash2 = {'canine': ['dogs','wolves']}

Из приведенного выше примера, поскольку у ключевого клыка в hash2 есть значение 'dogs', совпадающее с ключевыми животными в hash1, в котором также есть 'dogs', я хочу, чтобы он распечатал 'canine'.

Мне удалось сделать что-то подобное, когда у ключа есть только одно значение, но мне нужно, чтобы у него был длинный список значений, и, если какое-либо из значений совпадает, я хочу, чтобы он распечатал, у какого ключа есть совпадения. с.

EDIT: Я хочу, чтобы он распечатывал «canine», потому что, например, если у меня было несколько ключей в hash2

hash2 = {'canine':['dogs','wolves'],'domestic':['horse','rabbit']}

Я бы хотел, чтобы он распечатывал 'canine', потому что это тот, который соответствует, а не распечатывает весь хэш2

РЕДАКТИРОВАТЬ 2: hash1 = {'animals': ['dogs', 'cats']} hash2 = {'canine': ['dogs', 'wolves']}

for value in hash2.values():
    if value in hash1.values():
        #not sure how to write this so here's pseudocode
        print(hash2[key of matching value])

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

как то так?

for key_1,value_1 in hash1.items():
    for key_2,value_2 in hash2.items():
        if len([x for x in value_1 if x in value_2])>0:
            print(key_2)
0 голосов
/ 06 июля 2018

Вот код, который, я думаю, поможет вам приблизиться к тому, что вы ищете. Дайте мне знать, если это поможет.

hash1 = {'animals':['dogs','cats']}
hash2 = {'canine':['dogs','wolves'],'domestic':['horse','rabbit']}

for key, value in hash1.items():
    for key1, value1 in hash2.items():
        matches = set(value).intersection(set(value1))
        if matches:
            print(matches)
            print(key, key1)
0 голосов
/ 06 июля 2018

Мы можем построить set, который содержит все элементы из всех значений hash1. Затем мы можем проверить, есть ли пересечение между этим набором и каждым из значений hash2.

from itertools import chain

hash1 = {'animals':['dogs','cats']}
hash2 = {'canine':['dogs','wolves'],'domestic':['horse','rabbit']}

hash1_values = set(chain.from_iterable(hash1.values())) 
# equivalent to set(x for it in hash1.values() for x in it)


for k, v in hash2.items():
    if any(item in hash1_values for item in v):
        print(k)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...