声明defaultdict的正确方法

时间:2013-07-03 07:08:58

标签: python python-2.7 dictionary

我目前正在尝试在单元测试中使用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

我想知道出了什么问题。

2 个答案:

答案 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'],这正在产生您正在看到的异常。