比较两个词典键值并返回带有差异的新词典

时间:2017-08-20 20:52:12

标签: python dictionary

我想要做的是比较两个词典:

predict = {'eggs': [1,2],'ham': [1,2,3], 'sausage': [1,2,3]}
actual = {'eggs': [2], 'ham': [1,2]}

并返回差异的新词典:

difference = {'eggs': [1],'ham': [3], 'sausage': [1,2,3]}

执行此操作的有效方法(对于大量数据)是什么?感谢。

2 个答案:

答案 0 :(得分:1)

这应该这样做:

difference = {}
for key, value in predict.items():
    difference[key] = [el for el in predict[key] if (key not in actual) or (el not in actual[key])]

print(difference)

修改 代码已更新,以处理实际列表中缺少的类别

答案 1 :(得分:0)

您可以合并set.difference()dict理解:

>>> predict = {'eggs': [1,2],'ham': [1,2,3]}
>>> actual = {'eggs': [2], 'ham': [1,2]}
>>> difference = {k: list(set(v).difference(actual[k])) if k in actual else v for k, v in predict.items()}
{'eggs': [1], 'ham': [3]}

说明:

  • 您迭代predict键值对
  • 新的difference词典与[{1}}和predict
  • 具有相同的键
  • 但其值将是当前列表的actual
  • set difference - 由于密钥相同,您可以访问set(v).difference(actual[k])并查找其与当前密钥的区别(actual[k]
  • 最后,您将带有差异的结果集转换为列表,以便按要求输出。