python笔记47-面试题:如何判断字典a在字典b

前言

已知一个dict 比如a = {“a”:1},另一个dict比如为b = {“a”:1,”b”:2},如何判断a是否在与b中。
一般在接口测试的时候,返回的参数比较多的情况,如果一个个字段去校验,会比较麻烦,那么如何直接拿一个期望的字典放键值对,判断结果里面是否包含期望的值

set实现

set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
set的issubset方法,a.issubset(b) :判断集合 a 的所有元素是否都包含在集合 b 中

a = {"a": 1}
b = {"a": 1, "b": 2}

aa = set(a.items())
print(aa)
bb = set(b.items())
print(bb)

print(aa.issubset(bb))

运行结果

{('a', 1)}
{('a', 1), ('b', 2)}
True

自定义判断方法

上面方法看似没什么毛病,但是这里会存在一个问题,因为set是一个无序且不重复的元素集合。元素为不可变对象!
于是我们把a的值换成一个可变对象,如list 或 dict,问题就来了

a = {"a": [1, 2]}
b = {"a": [1, 2], "b": 2}

aa = set(a.items())

再次执行的时候就会报错

Traceback (most recent call last):
File "D:/demo/b.py", line 4, in <module>
aa = set(a.items())
TypeError: unhashable type: 'list'

a的值换成一个dict类型,也是会报错TypeError: unhashable type: 'dict’

a = {"a": {"c": 3}}
b = {"a": {"c": 3}, "b": 2}

aa = set(a.items())

于是可以自己写个函数遍历去判断

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

def dict_a_in_b(dict_a, dict_b):
'''is dict_a in dict_b, return True/False'''
result = None
for key in dict_a:
if (key in dict_b) and (dict_a[key] == dict_b[key]):
result = True
else:
return False
return result

if __name__ == '__main__':
a = {"a": {"c": 3}}
b = {"a": {"c": 3}, "b": 2}
print(dict_a_in_b(a, b))

实际应用

一般在接口测试的时候,返回的参数比较多的情况,如果一个个字段去校验,会比较麻烦,那么如何直接拿一个期望的字典放键值对,判断结果里面是否包含期望的值
当请求一个接口的时候,返回的内容如下

{
'code': 0,
'msg': 'success!',
'data': [{"username": "yoyo", "qq": "283340479"}]
}

期望结果里面包含 {'code’: 0, 'msg’: 'success!’}

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

def dict_a_in_b(dict_a, dict_b):
'''is dict_a in dict_b, return True/False'''
result = None
for key in dict_a:
if (key in dict_b) and (dict_a[key] == dict_b[key]):
result = True
else:
return False
return result

# 预期结果
expected = {'code': 0, 'msg': 'success!'}
# 实际结果
actual_result = {
'code': 0,
'msg': 'success!',
'data': [{"username": "yoyo", "qq": "283340479"}]
}

if __name__ == '__main__':
print(dict_a_in_b(expected, actual_result))

2020年第五期《python接口自动化+测试开发》课程,10月11号开学(火热报名中!)
本期上课时间:10月11号-1月3号,每周六、周日晚上20:30-22:30

(0)

相关推荐

  • 4.Python列表/元组/集合/字典

    碧茂大数据 前天 4.1 Python列表 · 列表用 [ ] 标识,是Python 最通用的复合数据类型. · 列表用 [ ] 表示,列表具有可嵌套性 4.1.1 Python列表截取 · 列表可以 ...

  • python空字典怎么写

    字典是另外一种可变容器模子,且可存储恣意类型工具. 字典的每一个键值(key=>value)对用冒号(:)宰割,每一个对之间用逗号(,)宰割,整个字典包罗正在花括号({})中 . 格局以下所示: ...

  • 【编程课堂】有序字典 OrderedDict

    编程课堂将和每周一坑一样,成为本教室公众号的一个长期固定栏目.每期讲解一个编程知识点,包括但不限于 Python 语法.模块介绍.编程小技巧等.用简短的篇幅,让你多了解一点编程. 上周每周一坑的题目 ...

  • #PY小贴士# 字典可以通过序号索引来访问?

    我们在学 python 中的 list 和 dict 时知道: list 是有序的,所以可以通过 list_a[0] 这样的方式通过索引(index)来访问列表中某个位置上的元素: dict 是无序的 ...

  • python笔记53-Leetcode面试题

    前言 Leetcode上有个练习题,也是面试经常会遇到的:请实现一个函数,把字符串 s 中的每个空格替换成"%20" 替换字符串 请实现一个函数,把字符串 s 中的每个空格替换成& ...

  • python笔记50-面试题:交换圣诞节礼物

    前言 圣诞节快到啦,为了打造良好的工作环境,同事之间的关系和谐,现在玩一个交换礼物的小游戏. 每个同事准备一个礼物,到时候互相交换,自己手里的礼物必须交换出去,并且得到一个其它人的礼物. 交换礼物 我 ...

  • Python面试题:判断IP地址是否合法

    判断输入的IP是否是合法的IP 思路: 1. 将字符串根据'.'分割为4个列表元素 2. 将每个元素进行比较是否在0~255范围内,如果是则返回结果为1,否则为0 3. 查看结果中是否有False情况 ...

  • 完整版Python笔记|超级有用

    完整版Python笔记|超级有用

  • 胡希恕伤寒论学习笔记——47

    47.太阳病,脉浮紧,发热,身无汗,自衄者愈. 病家脉浮紧.无汗.发热,可以判断出是太阳伤寒的麻黄汤证了,这时还没经过治疗,病家自行出现了衄的情况,那么体表腠理的瘀滞就解除了,发热.怕冷.无汗.脉浮紧 ...

  • Python每日一练:模拟账号密码登录(字典版)

    昨天发了<Python每日一练:模拟账号密码登录>后,有朋友留言说用python的字典来做比列表更好.我赶快去看了下,的确如此.字典:是一种无顺序的,可更改的一系列元素的合集,拥有相关联的 ...

  • 【python笔记】python java 语法,对比学习

    【python笔记】python java 语法,对比学习

  • python笔记2-冒泡排序

    前言 面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一批英雄好汉,本篇就详细讲解如何用python进行冒泡排序. 一.基本原理 1.概念: 冒泡排序(Bubble Sort),是一种 ...

  • python笔记3-发送邮件(smtplib)

    前言 本篇总结了QQ邮箱和163邮箱发送邮件,邮件包含html中文和附件,可以发给多个收件人,专治各种不行,总之看完这篇麻麻再也不用担心我的邮件收不到了. 以下代码兼容python2和python3, ...