比较python中两个字典中的值

时间:2014-11-25 10:42:37

标签: python

由于这个问题,我陷入了编码的中间: 我有两个字典如下:

a = {0:['1'],1:['0','-3']}
b = {'box 4': ['0 and 2', '0 and -3', ' 0 and -1', ' 2 and 3'], 'box 0': [' 1 ', ' 1 and 4 ', ' 3 and 4']

我想查找第一个词典中的值是否与第二个词中的值匹配,如果匹配,我想返回词典b中匹配的键和值。

例如:比较结果将返回box4,[' 0',' -3'],因为['0','-3']是一个项目a已经在b ['0 and -3']中找到了box0,但是如果只有'我发现我不希望它返回任何东西,因为没有任何值匹配它。结果也会返回['1']a,因为它是b中的一个项目,并且也在{{1}}中找到了。

有什么想法吗?我感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

你说,"比较的结果将返回box4,因为[' 0',' -3']是a中的一个项目,它已被发现也在b [' 0和-3'],"。我在b中没有看到'0 and -3'

另外,你的问题还不够明确。您的代码段不完整,您在此处只提供了一次案例。

然而,我会错误地假设你想要这样的东西

normalized_values = set([" and ".join(tokens) for tokens in a.values()])
for k in b:
    if normalized_values.intersection(set(b[k])):
        print k

答案 1 :(得分:0)

这里你去:它的简单编码,

>>> a_values = a.values()
>>> for x,y in b.items():
...     for i in y:
...         i = i.strip()
...         if len(i)>1:
...             i = i.split()[::2]
...             if i in a_values:
...                 print x,i
...         else:
...             if list(i) in a_values:
...                 print x,list(i)
box 4 ['0', '-3']
box 0 ['1']

pythonic方式:

>>> [ [x,i] for x,y in b.items() for i in y if re.findall('-?\d',i) in a_values ]
[['box 4', ' 0 and -3'], ['box 0', ' 1 ']]