2013-07-12 71 views
0

我一直在試圖弄清楚我做錯了什麼。使用附加字典

我從Excel中拉取單元格值 - 類別,子項目和要求的單元格值。

如果該類別和子項在字典

ldict 

已經存在,我想將其追加。我目前在做它像這樣:

ldict[(cat, sub)].append(req) 

,其中貓,子,和REQ是從Excel Unicode值轉換爲字符串:

req = unicodedata.normalize('NFKD', sh.Cells(a,i).Value).encode('ascii','ignore') 

不過,我不斷收到此錯誤:

Traceback (most recent call last): 
File "C:\Users\jenhuang\My Documents\dude\comparestrings.py", line 35, in <module> 
ldict[(cat, sub)].append(req) 
AttributeError: 'str' object has no attribute 'append' 

我的總體目標是在特定類別和子類別中搜索常用詞的這些需求字符串。這是爲了查看我是否可以創建一個自動化流程,以便我可以爲需求字符串建議類別和子類別。

任何想法?

編輯

我想這是因爲我的翻譯呼籲

ldict[(cat,sub)] 

爲字符串。我正在尋找解決方案。

+0

什麼的'cat','sub','req'和'ldict [(貓子) ]',在這行之後,你想在'ldict [(cat,sub)]'結束什麼?不知道你想要做什麼,我們不能告訴你如何去做,或者你做錯了什麼。 – abarnert

+0

@abarnert我編輯了它。請現在看看。 –

+0

我仍然沒有看到'ldict [(cat,sub)]'中的內容,或者你想在這行之後結束的內容。它應該是一個字符串嗎?包含一堆這樣的字符串的列表?字典映射到其他類型的單詞?已排序的字典映射套接字使用對等IP地址作爲密鑰堆棧幀? – abarnert

回答

1

append()是一個列表方法。字典在那裏有一個字符串。如果你想追加項目到列表中,你需要建立你的字典來包含列表。無論何時將值添加到此字典中,我都會建議類似ldict.setdefault(key, []).append(whatever)的內容,以確保您始終擁有列表。

+0

很好的回答! 我也在考慮將key - tuple(category,subcategory)設置爲第一個字符串作爲一個只有一個字符串的列表。 IE ldict [(貓,SUBCAT)] = [REQ] 然後 ldict [(貓,分)。追加(REQ),用於發現未來字符串。 這項工作? –

+0

@ Doof12確定它會工作,但你必須有一個特殊情況來檢測它是否是第一個項目。使用內置行爲的setdefault()。最有意義的取決於程序的流程。 –

0

我猜你正在試圖做的是這樣的:

ldict[(cat, sub)] = req 

就像肖恩建議:如果你想用鑰匙(cat, sub)訪問列表ldict然後追加req吧,使用setdefault():如果之前沒有設置

ldict.setdefault((cat, sub), []).append(req) 

這其中的(cat, sub)值設置爲一個空表,否則返回列表中最後追加req它。

而且,由於這顯然是答案,做肖恩青睞和接受他的答案...

+0

我實際上試圖將一個新的值附加到現有的值列表中。 –

+0

要**什麼**列表和**哪些**值?如果你做'ldict [(cat,sub)]。append(req)'',你試着用'edict'中的關鍵字'(cat,sub)'將'req'追加到一個(尚未描述的)值。我不明白爲什麼肖恩的答案不能解決你的問題... – tamasgal

+0

它的確如此!對不起,謝謝你的回覆! –