编写接受字典而不指定keyvalu的函数

2024-09-29 17:09:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个客户机,他的期望是编写一个函数convert(),它接受一个dictionary,然后返回一个与input dictionary相同的结果。现在,从我的角度来看,我应该在convert()内对输入进行检查,该检查具有相同的键值,以便返回相同的值,以便传递assert。然而,他说那不是他所期望的,他取消了合同。他希望convert()函数返回值而不使用模板进行检查(例如if record_id == 412029665_201012不应该使用),这是什么魔法

from typing import Dict


def convert(json_in: Dict) -> Dict:
    if json_in:
        if 'record_id' and 'irs_object_id' in json_in:
            record_id = json_in.get('record_id')
            irs_object_id = json_in.get('irs_object_id')
            if record_id == '412029665_201012' and irs_object_id == '201113199349201766':
                return json_in
    return dict()  # empty dictionary


def test_no_change_case():
    original: Dict = {
        "record_id": "412029665_201012",
        "irs_object_id": "201113199349201766",
    }
    expected: Dict = {
        "record_id": "412029665_201012",
        "irs_object_id": "201113199349201766",
    }
    actual: Dict = convert(original)
    assert actual == expected


test_no_change_case()

Tags: and函数inidjsonconvertgetdictionary
1条回答
网友
1楼 · 发布于 2024-09-29 17:09:34

您可以随时执行assert original == expected,它将检查所有键和相应的值是否匹配,如下面所示,如果我更改expected的一个键的值,或者添加一个新的键-值对,断言将失败

In [10]: from typing import Dict                                                                                                                                                                                      

In [11]:  original: Dict = { 
    ...:         "record_id": "412029665_201012", 
    ...:         "irs_object_id": "201113199349201766", 
    ...:     }                                                                                                                                                                                                        

In [12]: expected: Dict = { 
    ...:         "record_id": "412029665_201012", 
    ...:         "irs_object_id": "201113199349201766", 
    ...:     }                                                                                                                                                                                                        

In [13]: assert original == expected                                                                                                                                                                                  

In [14]: expected: Dict = { 
    ...:         "record_id": "412029665_201012", 
    ...:         "irs_object_id": "2011", 
    ...:     }                                                                                                                                                                                                        

In [15]: assert original == expected                                                                                                                                                                                  
                                     -
AssertionError                            Traceback (most recent call last)
<ipython-input-15-573681974ca8> in <module>
  > 1 assert original == expected

AssertionError: 

In [16]: expected: Dict = { 
    ...:         "record_id": "412029665_201012", 
    ...:         "irs_object_id": "201113199349201766", 
    ...:         "key": "value" 
    ...:     }                                                                                                                                                                                                        

In [17]: assert original == expected                                                                                                                                                                                  
                                     -
AssertionError                            Traceback (most recent call last)
<ipython-input-17-573681974ca8> in <module>
  > 1 assert original == expected

AssertionError

同样在您的原始代码中,您实际上不需要额外的if 'record_id' and 'irs_object_id' in json_in:检查,因为您使用的是dict.get方法,如果字典中没有键,该方法将返回None

from typing import Dict


def convert(json_in: Dict) -> Dict:
    if json_in:
        #Removed the if test
        record_id = json_in.get('record_id')
        irs_object_id = json_in.get('irs_object_id')
        if record_id == '412029665_201012' and irs_object_id == '201113199349201766':
            return json_in
    return dict()  # empty dictionary


def test_no_change_case():
    original: Dict = {
        "record_id": "412029665_201012",
        "irs_object_id": "201113199349201766",
    }
    expected: Dict = {
        "record_id": "412029665_201012",
        "irs_object_id": "201113199349201766",
    }
    actual: Dict = convert(original)
    assert actual == expected


test_no_change_case()

相关问题 更多 >

    热门问题