由于这个问题,我陷入了编码的中间: 我有两个字典如下:
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}}中找到了。
有什么想法吗?我感谢任何帮助。
答案 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 ']]