2011-03-22 175 views
0

我正在寫一個Python腳本,需要一個目錄,並且對於該目錄中特定類型的每個文件,創建一個字典或自定義對象。Python動態對象生成混亂

我覺得自己像一個白癡,但當我到達實際創建字典的部分..我很困惑如何實例化和跟蹤動態對象。

#Pseudocode 
for each conf file in given directory: 
    x = customObject('filename') # variable name fail 
    track_list.append(customObject('filename')) # this seems weird 

我應該創建這些對象並將它們添加到列表中嗎?人們通常如何做到這一點?我覺得我正在嘗試編寫寫入更多代碼的代碼?

+0

需要說明:通過「創建字典或自定義對象」的意思是「創建**自定義對象的字典**(** s **)」?通過「對於該目錄中特定類型的每個文件創建」,您是否意味着爲每個找到的不同類型的文件創建單獨的一個(字典)? – martineau 2011-03-22 20:02:11

回答

2
track_list = [custom_object(filename) for filename in directory] 

其中目錄是您關心的文件名列表是一種非常常見的模式。如果你想用關鍵字文件名的字典,你可以這樣做:

custom_dict = dict((filename, custom_object(filename)) for filename in directory) 
0
my_objects = {name:customObject(name) for name in dir if isMyType(name)} 
+1

值得指出的是,這取決於py3k。 – nmichaels 2011-03-22 19:01:32

+1

其實它在2.7 – 2011-03-22 19:22:17

+0

中工作得很好嘿,它的確如此。 2.7之後出來了3,但現在我有一個理由升級到它!去適應,去吧。 – nmichaels 2011-03-22 19:26:02

1

@nmichaels答案是做最清潔和最Python的方式。更短的方法是:

track_list = map(customObject, directory) 

編輯:哦,我看你想要一本字典,即使你的僞代碼使一個列表。你可以這樣做:

result = dict((filename, customObject(filename)) for filename in directory) 

說明:dict需要一個對象,當超過產量的元組迭代,並把它們轉化成一本字典,例如

>>> dict([('hey', 3), ('food', 4), ('haxhax', 6)]) 
{'food': 4, 'haxhax': 6, 'hey': 3} 
+0

哈,同時編輯ftw。 '地圖'雖然很不錯。 – nmichaels 2011-03-22 19:05:02