2010-09-25 128 views
2

的Solaris 2.4.3蟒:如果collections.defaultdict不可用,該怎麼辦?

from collections import defaultdict 

不存在..

請指教一下可能是使用多級字典替代:

dictOut['1']['exec'] = 'shell1.sh' 
dictOut['1']['onfailure'] = 'continue' 
... 
dictOut['2']['exec'] = 'shell2.sh' 
dictOut['2']['onfailure'] = stop' 

千恩萬謝 applom

回答

2

setdefault

dictOut.setdefault('1', {})['exec'] = 'shell1.sh' 
+0

請注意,這需要您每次使用新的頂級密鑰時都使用'setdefault'。 – 2010-09-25 05:42:45

2

回答looks-like-it-works code過去24小時內(通過搜索「defaultdict」中,選擇「最新」或「活動」的順序)

+0

@Imran,我會把它留給John Machin,但實際上在他的帖子中顯示我的代碼意味着更強的支持,而不僅僅是鏈接到他可能實際感受不到的代碼。此外,由於線程中有另一個答案,因此他並沒有明確指出我的代碼是專門針對我的代碼的,因此他沒有特別鏈接到我的代碼。當然,如果他想在他的職位上,他是歡迎使用它。 – aaronasterling 2010-09-25 06:17:04

+0

我認爲他足夠具體,因爲只有2個答案,並且在「最新」或「主動」順序中,您的答案排在前列。 – Imran 2010-09-25 10:19:14

+2

@Imran:編輯的想法並不是要改變整個答案的內容,而是試圖給OP提供關於如何爲自己找出事情的線索。 「看起來像是有效」是一種不合理的認可。最新/主動是所有匹配問題的排序,而不僅僅是對Aaron回答的問題的回答。 – 2010-09-25 11:32:01

2

作爲替代setdefault,如果你想額外的水平字典善良,嘗試

class MultiDict(dict): 
    def __getitem__(self, item): 
     if item not in self.iterkeys(): 
      self[item] = MultiDict() 

     return super(MultiDict, self).__getitem__(item) 
+0

@Aaron我只是決定改用'setdefault'來完成這項工作。 (我不確定爲什麼我在那裏有'new ='......) – 2010-09-25 05:37:05

+0

好點。這是我在凌晨1點發生的事情。認爲我需要上牀睡覺。修正了......我想。讓我知道如果你看到任何問題:) – 2010-09-25 05:58:20

+0

我以爲同樣的事情,但我最初並沒有看到如何正確做到這一點。再次更新答案。 – 2010-09-25 06:47:49

0

我只是想知道爲什麼不使用單級字典與元組作爲哈希鍵?

+0

,因爲這強制追蹤哪些元組被定義爲客戶端代碼上的密鑰,這在愚蠢地存在於諸如Michael Mior的回答中那樣的乾淨和強健的替代方案中是愚蠢的。 – aaronasterling 2010-09-25 07:18:12

+0

嗨,對於沒有迴應的道歉 - 我在週末沒有進入箱子 - Michael Mior的建議很完美。謝謝 - applom – apllom 2010-09-27 00:00:36

相關問題