Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环返回字典/列表嵌套中字典内的值-必须是整数或不是str_Python_Python 3.x_List_Dictionary - Fatal编程技术网

Python 循环返回字典/列表嵌套中字典内的值-必须是整数或不是str

Python 循环返回字典/列表嵌套中字典内的值-必须是整数或不是str,python,python-3.x,list,dictionary,Python,Python 3.x,List,Dictionary,我正在创建一个函数,使用字典中的以下列表返回猫的品种,我不断收到TypeError:列表索引必须是整数或切片,而不是str,当尝试在pets值内循环列表时: 我尝试过许多不同的方法,但都没有成功。我的任务是根据测试用例编写函数。我相信解决方案可能需要一个计数/计数器才能通过测试请参见测试用例。我希望能够索引到列表中的任何位置,以找到猫的品种,从而找到回路。包含字典信息的cc_pet_shop将被传递给函数,因此函数定义中的参数是input_dict_of_list 到目前为止,我在函数体中的解决

我正在创建一个函数,使用字典中的以下列表返回猫的品种,我不断收到TypeError:列表索引必须是整数或切片,而不是str,当尝试在pets值内循环列表时:

我尝试过许多不同的方法,但都没有成功。我的任务是根据测试用例编写函数。我相信解决方案可能需要一个计数/计数器才能通过测试请参见测试用例。我希望能够索引到列表中的任何位置,以找到猫的品种,从而找到回路。包含字典信息的cc_pet_shop将被传递给函数,因此函数定义中的参数是input_dict_of_list

到目前为止,我在函数体中的解决方案如下:


def get_pets_by_breed(input_dict_of_list, pet):
    for pet in cc_pet_shop:
       return input_dict_of_list["pets"][pet]["breed"]
       



我相信我有正确的语法来表示带有

cc_pet_shop["pets"][pet]["breed"]
我需要满足一个单元测试用例,所以我的函数需要两个参数

input_dict_of_list
代表cc_宠物店以及

pet
它表示列表中包含繁殖键值对的任何索引位置

如果它提供了进一步的清晰性,那么这就是我的代码正在对照的测试用例的格式:

def test_all_pets_by_breed__found(self):
        pets = get_pets_by_breed(self.cc_pet_shop, "British Shorthair")
        self.assertEqual(2, len(pets))
列表[pets]的输入目录是一个列表。此列表包含6项,可作为列表[pets][0]的输入目录、列表[pets][1]的输入目录、…、列表[pets][5]的输入目录访问

品种名称可通过输入[宠物列表][0][“品种”]、输入[宠物列表][1][“品种”]、…、输入[宠物列表][5][“品种”]访问

或者,您可以使用for循环迭代此列表中的项:

对于[宠物]列表输入中的品种: 印刷品品种[品种] 注意:在python中,for循环的末尾不需要pet+=1。Python自己处理迭代

“英国短毛”宠物店“英国短毛” 由于我们希望返回列表,因此可以使用列表理解而不是for循环:

def通过宠物饲养店获得宠物,品种: 如果d['BREAD']==BREAD,则返回[cc_宠物店['pets']中的d代表d] printget_pets_by_breedcc_pet_商店,英国短发 [ {'price':500,'品种':'英国短毛','姓名':'珀西爵士','宠物类型':'猫', {'price':500,'品种':'英国短毛','姓名':'国王巴格德马格斯','宠物类型':'猫'} ] 列表[pets]的输入目录是一个列表。此列表包含6项,可作为列表[pets][0]的输入目录、列表[pets][1]的输入目录、…、列表[pets][5]的输入目录访问

品种名称可通过输入[宠物列表][0][“品种”]、输入[宠物列表][1][“品种”]、…、输入[宠物列表][5][“品种”]访问

或者,您可以使用for循环迭代此列表中的项:

对于[宠物]列表输入中的品种: 印刷品品种[品种] 注意:在python中,for循环的末尾不需要pet+=1。Python自己处理迭代

“英国短毛”宠物店“英国短毛” 由于我们希望返回列表,因此可以使用列表理解而不是for循环:

def通过宠物饲养店获得宠物,品种: 如果d['BREAD']==BREAD,则返回[cc_宠物店['pets']中的d代表d] printget_pets_by_breedcc_pet_商店,英国短发 [ {'price':500,'品种':'英国短毛','姓名':'珀西爵士','宠物类型':'猫', {'price':500,'品种':'英国短毛','姓名':'国王巴格德马格斯','宠物类型':'猫'} ]
首先,我喜欢你用正确性测试来展示这个。太棒了

其次,您正在访问一个列表中的dict列表,这可能有点让人困惑。假设cc_pet_shop的测试功能和结构都不能更改,并且根据您对unittest的明显使用,我可以自由地介绍一下我的方法,这是一个可行的解决方案:

导入单元测试 通过饲养宠物获得宠物,繁殖: 结果=[] 对于宠物目录中的宠物[“宠物”]: 如果宠物['bride']==品种: 结果.附件PET 返回结果 类LegiScanTestCaseunittest.TestCase: def设置自我: self.cc_pet_shop={pets:[ { 姓名:珀西爵士, 宠物类型:猫, 品种:英国短毛, 价格:500 }, { 姓名:巴格德马格斯国王, 宠物类型:猫, 品种:英国短毛, 价格:500 }, { 姓名:兰斯洛特爵士, 宠物类型:狗, 品种:庞斯基, 价格:1000, }, { 姓名:亚瑟, 宠物类型:狗, 品种:哈士奇, 价格:900, }, { 姓名:特里斯坦, 宠物类型:猫, 品种:巴塞特猎犬, 价格:800, }, { 姓名:梅林, 宠物类型:猫, 品种:埃及毛, 价格:1500, } ] } def测试\u所有宠物\u由\u繁殖\u发现自己: pets=通过breedself.cc_宠物店获得宠物,'英国短毛' self.assertEqual2,lenpets 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': unittest.main 下面是函数的另一个实现,它使用列表理解在一行中完成相同的事情:

def通过品种获得宠物,品种: 如果宠物['BREAD']==BREAD,返回[pet dict['pets']中宠物对应的宠物]
首先,我喜欢你用正确性测试来展示这个。太棒了

其次,您正在访问一个列表中的dict列表,这可能有点让人困惑。假设cc_pet_shop的测试功能和结构都不能更改,并且根据您对unittest的明显使用,我可以自由地介绍一下我的方法,这是一个可行的解决方案:

导入单元测试 通过饲养宠物获得宠物,繁殖: 结果=[] 对于宠物目录中的宠物[“宠物”]: 如果宠物['bride']==品种: 结果.附件PET 返回结果 类LegiScanTestCaseunittest.TestCase: def设置自我: self.cc_pet_shop={pets:[ { 姓名:珀西爵士, 宠物类型:猫, 品种:英国短毛, 价格:500 }, { 姓名:巴格德马格斯国王, 宠物类型:猫, 品种:英国短毛, 价格:500 }, { 姓名:兰斯洛特爵士, 宠物类型:狗, 品种:庞斯基, 价格:1000, }, { 姓名:亚瑟, 宠物类型:狗, 品种:哈士奇, 价格:900, }, { 姓名:特里斯坦, 宠物类型:猫, 品种:巴塞特猎犬, 价格:800, }, { 姓名:梅林, 宠物类型:猫, 品种:埃及毛, 价格:1500, } ] } def测试\u所有宠物\u由\u繁殖\u发现自己: pets=通过breedself.cc_宠物店获得宠物,'英国短毛' self.assertEqual2,lenpets 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': unittest.main 下面是函数的另一个实现,它使用列表理解在一行中完成相同的事情:

def通过品种获得宠物,品种: 如果宠物['BREAD']==BREAD,返回[pet dict['pets']中宠物对应的宠物]
当你在cc_宠物店为宠物做这些事情时,你希望宠物有什么价值?当您随后输入[宠物][宠物][品种]的输入命令时,您希望[宠物]的输入命令类型是什么?pet是有效的索引吗?另外:通过从for循环内部返回此值,您希望实现什么?您知道每次调用只能返回一次,是吗?这意味着您缺少基本原理,特别是for循环在Python中的工作方式。复习教程会比在这里提问更好。您可能会发现,例如,有帮助。@KarlKnechtel谢谢您的建议。我已经研究这个问题好几个小时了,现在基本上已经筋疲力尽了。我正在阅读《基本原理》,并将堆栈溢出作为最后的解决方法
如有任何解决方案,我将不胜感激,以巩固我的理解。简单地说,我的函数在被调用时应该返回breed的值。它应该对列表中存储的任何字典执行此操作,这是pets键的值。抱歉,我不符合要求。您能举例说明为宠物提供的值可能是什么,以及结果输出应该是什么,并说明原因吗?@KarlKnechtel抱歉,要求提供一个函数,该函数可以访问包含猫品种的列表,并在调用时返回存储在品种键值对中的品种。它是根据上面的测试用例进行测试的,不需要修改,因此可以认为是正确的。函数定义必须满足单元测试用例,它在assertEqual方法中似乎有两个参数,以便通过测试并证明函数可以返回cat类型。希望这更清楚一些。当你们在cc_宠物店为宠物做这件事时,你们希望宠物有什么价值?当您随后输入[宠物][宠物][品种]的输入命令时,您希望[宠物]的输入命令类型是什么?pet是有效的索引吗?另外:通过从for循环内部返回此值,您希望实现什么?您知道每次调用只能返回一次,是吗?这意味着您缺少基本原理,特别是for循环在Python中的工作方式。复习教程会比在这里提问更好。您可能会发现,例如,有帮助。@KarlKnechtel谢谢您的建议。我已经研究这个问题好几个小时了,现在基本上已经筋疲力尽了。我正在阅读基础知识,并已将堆栈溢出作为最后的手段,因此希望能找到任何解决方案,以便巩固我的理解。简单地说,我的函数在被调用时应该返回breed的值。它应该对列表中存储的任何字典执行此操作,这是pets键的值。抱歉,我不符合要求。您能举例说明为宠物提供的值可能是什么,以及结果输出应该是什么,并说明原因吗?@KarlKnechtel抱歉,要求提供一个函数,该函数可以访问包含猫品种的列表,并在调用时返回存储在品种键值对中的品种。它是根据上面的测试用例进行测试的,不需要修改,因此可以认为是正确的。函数定义必须满足单元测试用例,它在assertEqual方法中似乎有两个参数,以便通过测试并证明函数可以返回cat类型。希望这更清楚一些。嗨,如果没有在函数中定义,并且给出了cc_pet_shop字典/列表,这个解决方案似乎可以工作。但是,如测试用例所示,我的函数需要两个参数来满足测试用例,我收到了错误:返回输入\u dict\u of_listpet[bride]TypeError:将字符串索引放在我上面描述的函数中时,它必须是整数。您是否可以修改您的解决方案,以满足我在函数定义中提供和定义的测试用例,从而使单元测试与它一起工作?感谢you@loco完成。我添加了函数get_pets_by_breed.Hi,如果没有在函数中定义,并且给出了cc_pet_商店字典/列表,则此解决方案似乎可以工作。但是,如测试用例所示,我的函数需要两个参数来满足测试用例,我收到了错误:返回输入\u dict\u of_listpet[bride]TypeError:将字符串索引放在我上面描述的函数中时,它必须是整数。您是否可以修改您的解决方案,以满足我在函数定义中提供和定义的测试用例,从而使单元测试与它一起工作?感谢you@loco完成。我增加了按品种获取宠物的功能。
def test_all_pets_by_breed__found(self):
        pets = get_pets_by_breed(self.cc_pet_shop, "British Shorthair")
        self.assertEqual(2, len(pets))