我目前正在尝试在单元测试中使用defaultdict
。
我这样宣布。
dic_response = defaultdict(list)
dic_response['d']['DisplayStatusList'] = [{
'DisplayStatusID': 26,
'Name': 'To sell'
}]
失败了
Traceback(最近一次调用最后一次):文件 “/home/maazza/PycharmProjects/django_test/app_tester/tests.py”,一行 422,在test_save_display_status中 'Name':'To sell',TypeError:list indices必须是整数,而不是str
我想知道出了什么问题。
答案 0 :(得分:4)
您创建了一个字典,其中每个键都有一个列表作为其值,但之后您尝试使用字符串索引访问其中一个列表项...
看起来你想创建一个字典的默认词典......
>>> from collections import defaultdict
>>> dic_response = defaultdict(dict)
>>> dic_response['d']['DisplayStatusList'] = [{'DisplayStatusID': 26, 'Name': 'To sell'}]
>>> dic_response
defaultdict(<type 'dict'>, {'d': {'DisplayStatusList': [{'DisplayStatusID': 26, 'Name': 'To sell'}]}})
答案 1 :(得分:2)
你使用它的方式,你应该声明defaultdict(dict)
。现在正在发生的事情是你正在访问dic_response['d']
,这会创建一个新的列表(应该是一个字典,但你要求defaultdict(list)
所以你得到一个列表)。然后,这个新列表被用作new_list['DisplayStatusList']
,这正在产生您正在看到的异常。