【发布时间】:2012-10-09 01:08:09
【问题描述】:
我想获取两个字典并打印它们的差异。此差异应包括键和值的差异。我创建了这个小 sn-p 以使用 unittest 模块中的内置代码来实现结果。但是,这是一个讨厌的 hack,因为我必须继承 unittest.TestCase 并提供一个 runtest() 方法才能使其工作。此外,此代码将导致应用程序出错,因为它会在存在差异时引发AssertError。我真正想要的只是打印差异。
import unittest
class tmp(unittest.TestCase):
def __init__(self):
# Show full diff of objects (dicts could be HUGE and output truncated)
self.maxDiff = None
def runTest():
pass
_ = tmp()
_.assertDictEqual(d1, d2)
我希望使用difflib 模块,但它看起来只适用于字符串。有什么办法可以解决这个问题并且仍然使用difflib?
【问题讨论】:
-
@MarkReed -- 这是不同的。这要求 keys 的差异,这要求 keys 和 values 的差异(我假设 OP 需要 key-value 对)——例如
{1:2, 2:3}与{1:3,2:2}不同,但实际上并没有明确说明... -
@mgilson - 我没有提出关闭请求或将其标记为重复,但如果您查看该页面上接受的答案,它包括值比较,而不仅仅是键集比较。
-
我不一定介意这个解决方案。但是,有没有办法稍微清理一下?我想改变两件事:1. 捕获/抑制 AssertError(很容易做到但看起来很奇怪) 2. 使用
assertDictEqual而不必继承TestCase。
标签: python