如果值匹配并从python中返回差异,则从字典中减去键

时间:2017-11-15 17:47:54

标签: python dictionary

如果值匹配,我想减去两个dicts的键。一个字典看起来像这样

dict_one
{(2, 2): 38,
 (2, 6): 51,
 (4, 9): 29,
 (5, 1): 53,
 (6, 6): 91,
 (6, 9): 105,
 (7, 6): 66,
 (8, 4): 74,
 (8, 8): 89,
 (9, 6): 115}

另一个像这样

dict_two
{(2, 1): 38,
 (2, 6): 51,
 (4, 9): 29,
 (5, 1): 53,
 (6, 6): 91,
 (6, 9): 105,
 (7, 6): 66,
 (8, 4): 74,
 (8, 8): 89,
 (9, 6): 115

在此处的示例中,结果应为

result
(1, 0, 0, 0, 0, 0, 0, 0, 0, 0)

此示例中的值38基本上将密钥从(2,2)更改为(2,1)。所以这些值对之间的差异是1,而每个其他键在两个词组之间保持相同,因此其他键的输出值都是0

1 个答案:

答案 0 :(得分:2)

如果您正在寻找更改的,那么您的键值映射顺序似乎是错误的。反转其中一个词典,这样您就可以轻松查找给定值的相应元组。

然后遍历另一个的排序键值对:

inverted_dict_one = {v: k for k, v in dict_one.items()}
result = [abs(k[1] - inverted_dict_one[v][1] for k, v in sorted(dict_two.items())]

演示:

>>> inverted_dict_one = {v: k for k, v in dict_one.items()}
>>> [abs(k[1] - inverted_dict_one[v][1]) for k, v in sorted(dict_two.items())]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]