zoukankan      html  css  js  c++  java
  • 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))
    
  • 相关阅读:
    Docker----mysql数据持久化
    Docker-----容器数据卷
    Docker-----制造自己的镜像
    Docker----常用命令(镜像和容器的常用命令)
    Docker----阿里云镜像加速
    Docker概述
    com.aliyuncs.exceptions.ClientException: InvalidVersion : Specified parameter Version is not valid.
    夜神模拟器的使用踩坑--adb devices无法连接设备
    python利用smtplib模块发送邮件
    appium环境安装说明
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/13717522.html
Copyright © 2011-2022 走看看