python断言assertequal_如何实现对值应用assertSequenceEqual的assertDictEqual

我知道,在字典上执行assertEqual时,调用assertDictEqual。类似地,序列上的assertEqual将执行assertSequenceEqual。

然而,当assertDictEqual在比较值时,似乎没有使用assertEqual,因此assertSequenceEqual不被调用。

请考虑以下简单的词典:lst1 = [1, 2]

lst2 = [2, 1]

d1 = {'key': lst1}

d2 = {'key': lst2}

self.assertEqual(lst1, lst2) # True

self.assertEqual(d1, d2) # False ><

如何通过递归地对值应用类似于assertEqual的语义来测试诸如d1和d2这样的字典,以便正确比较它们的相等性?

我希望尽可能避免使用外部模块(如建议的in this question),除非它们是本地django扩展。

编辑

本质上,我追求的是一个内置版本:def assertDictEqualUnorderedValues(self, d1, d2):

for k,v1 in d1.iteritems():

if k not in d2:

self.fail('Key %s missing in %s'%(k, d2))

v2 = d2[k]

if isinstance(v1, Collections.iterable) and not isinstance(v1, basestring):

self.assertValuesEqual(v1, v2)

else:

self.assertEqual(v1, v2)

上面代码的问题是,错误消息没有内置代码宣称的那么好,而且可能有一些边缘情况我忽略了(就像我刚刚从头顶上写下的那样)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值