gpt4 book ai didi

python - 断言除了一个键之外两个字典都相等

转载 作者:行者123 更新时间:2023-12-01 06:31:00 29 4
gpt4 key购买 nike

我需要测试一个函数,该函数将在django中使用rest_framework.test.APITestCase的assertEqual返回一个字典。该字典是这样的:

{
"first_name": "John",
"last_name": "Doe",
"random": some random number
}

除了 random 键之外,如何检查返回的字典是否具有适合我的结果?

我的意思是,如果传递这两个字典,assertEqual(a, result) 应该返回 True:

a = {
"first_name": "John",
"last_name": "Doe",
"random": 12
}

result = {
"first_name": "John",
"last_name": "Doe",
"random": 24
}

是否有办法在 assertEqual 中做出这种异常,或者我必须使用 assert

更新:

感谢大家,我得到了很好的解决方案,但是如果我得到一个包含这些字典的列表,例如:

assertEqual(list_of_dicts, expected_result_list)

我的意思是在这两个列表中:

list1 = [
d1,
d2,
d3
]

list2 = [
d1,
d2,
d3
]

应该相等,而不考虑每个字典中的random

我是否必须循环遍历列表并一一比较字典,或者还有最快的解决方案吗?

最佳答案

您可以创建字典的副本并从其中弹出随机数

a_copy = a.copy()
a_copy.pop("random")
result_copy = result.copy()
result_copy.pop("random")

assertEqual(a_copy, result_copy)

如果您不想保留原始内容,请直接在现有词典上使用pop()

如果您有两个字典列表,您可以使用 zip 迭代这两个列表并比较每一对

for l, r in zip(copy.deepcopy(list_of_dicts), copy.deepcopy(expected_result_list)):
l.pop("random")
r.pop("random")
assertEqual(l, r)

关于python - 断言除了一个键之外两个字典都相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59917028/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com