我想要做的是比较两个词典:
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]}
执行此操作的有效方法(对于大量数据)是什么?感谢。
答案 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]
)