2011-03-22 298 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