1

嗨,我想弄清楚如何比较我拥有的两个不同哈希映射的值。

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

从上面的示例中,由于 hash2 中的键 canine 具有与 hash1 中也具有 'dogs' 的键动物匹配的值 'dogs',我希望它打印出 'canine'。

当一个键只有一个值时,我能够做这样的事情,但我需要它有一个长长的值列表,如果任何值匹配,我希望它打印出它与哪个键匹配。

编辑:我希望它打印出'canine',因为例如,如果我在 hash2 中有多个键

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

我只希望它打印出 'canine' 因为那是匹配的,而不是打印出整个 hash2

编辑 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])
4

3 回答 3

1

这是一些我认为可以让您接近您正在寻找的代码的代码。让我知道它是否有帮助。

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)
于 2018-07-06T13:46:42.813 回答
0

我们可以构建一个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)
于 2018-07-06T13:45:07.553 回答
0

像这样的东西?

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)
于 2018-07-06T13:45:35.627 回答