2013-07-03 71 views
0

我目前正在嘗試在unittest中使用defaultdict。 我這樣申明。聲明defaultdict的正確方法

dic_response = defaultdict(list) 
dic_response['d']['DisplayStatusList'] = [{ 
    'DisplayStatusID': 26, 
    'Name': 'To sell' 
}] 

它失敗

Traceback (most recent call last): File "/home/maazza/PycharmProjects/django_test/app_tester/tests.py", line 422, in test_save_display_status 'Name': 'To sell', TypeError: list indices must be integers, not str

我不知道什麼是錯的。

+0

我知道這是舊的,但[mcve]會在這個問題上大有裨益。 –

回答

2

你使用這種方式,你應該聲明defaultdict(dict)。現在發生的事情是你正在訪問dic_response['d'],它創建了一個新列表(這應該是一個字典,但你要求defaultdict(list),所以你得到一個列表)。然後,那個新列表被用作new_list['DisplayStatusList'],這是產生你看到的例外。

+0

這就是它,非常感謝 – maazza

+0

順便說一句,如果你能告訴我爲什麼它在'賣'上失敗,而不是在'DisplayStatuslist'上它將是完美的 – maazza

+0

@maazza:不知道爲什麼它選擇行號,對不起。它*應該*抱怨'dic_response ['d'] ['DisplayStatusList']'行。在你的代碼的其餘部分可能會解釋它,但我必須看到它是確定的。 (這不是一個請求發佈你的整個代碼:發佈400多行代碼到stackoverflow.com通常是不被贊同的。使用這個網站的方式正是你所做的:隔離導致問題的最小片段然後發佈該片段。) – rmunn

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'}]}}) 
相關問題