检查Python Dictionary值是否在另一个Dictionary的值中

时间:2014-07-25 05:36:32

标签: python loops for-loop dictionary

我有两个python词典,如果键没有任何相同的值,我想返回字典键的组合。 有点像:

  1. for i in' a':
  2. for j in' b':
  3. for i.items():
  4. if any.j.items()
  5. 中的any.i.items()
  6. 继续
  7. 其他人告诉我将所有组合配对在一起
  8. 让我们说我的代码如下所示:

    a={'dog':['hungry','fun'],'cat':['ugly','old'],'fish':[1,2,'hungry',4]}
    b={'raccoon':['ugly',1,3,], 'bird':[18,'hungry'],'cat':['orange','short']}
    

    这将返回

    dog+raccoon, dog+cat, cat+bird, cat+cat, fish+cat 
    

    因为这些潜在配对中没有一个具有共同的字典值。如果有人能告诉我如何做到这一点,我将不胜感激。

3 个答案:

答案 0 :(得分:2)

您可以使用套装:

from itertools import product
pairs = set()
for (ak, av), (bk, bv) in product(a.items(), b.items()):
    if not set(av).intersection(set(bv)):
        pairs.add("%s+%s" % tuple(sorted([ak, bk])))
print pairs

产地:

set(['bird+cat', 'cat+fish', 'cat+cat', 'cat+dog', 'dog+raccoon'])

如果您首先设置而不是列表,则效率会更高。

答案 1 :(得分:0)

可能这可以得到它:

a={'dog':['hungry','fun'],'cat':['ugly','old'],'fish':[1,2,'hungry',4]}
b={'raccoon':['ugly',1,3,], 'bird':[18,'hungry'],'cat':['orange','short']}

result = []
for b_key, b_value in b.iteritems():
    for a_key, a_value in a.iteritems():
        if not any(x in a_value for x in b_value):
            result.append((a_key, b_key))
print(result)
[('dog', 'raccoon'), ('cat', 'bird'), ('fish', 'cat'), ('dog', 'cat'), ('cat', 'cat')]

答案 2 :(得分:0)

def no_shared(a,b):
    res = []
    pairs = [(x, y) for x in a for y in b]
    for x,y in pairs:
        if set(a[x]) & set(b[y]):
            continue
        res.append((x, y))
    return res

基本上测试列表之间的任何交集(作为集合),然后如果它们有任何交集则跳过添加。

此外,如果列表值对于该词典中的该条目总是唯一的(从示例中看起来如此),那么最初将其作为一组存储将为您保存转换。