zoukankan      html  css  js  c++  java
  • 面试题:如何判断字典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())

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


    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": "36", "qq": "286075578"}]
    }

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


    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))
  • 相关阅读:
    AIX下的ha高可用集群cluster
    触发redo写的几个条件
    Oracle Internals Notes Redo Write Triggers
    触发写Redo&nbsp;Log的条件
    [Oracle]理解undo表空间
    MySQL数据备份之mysqldump使用
    Orabbix无法获取Oracle DB Size和DB Files Size的解决方法
    ES5和ES6那些你必须知道的事儿(三)
    ES5和ES6那些你必须知道的事儿(二)
    ES5和ES6那些你必须知道的事儿(一)
  • 原文地址:https://www.cnblogs.com/Wl55387370/p/14474527.html
Copyright © 2011-2022 走看看