【问题标题】:Python Dynamic Object Generation ConfusionPython 动态对象生成混淆
【发布时间】:2011-03-22 18:52:30
【问题描述】:

我正在编写一个 Python 脚本,它接受一个目录,并为该目录中特定类型的每个文件创建一个字典或自定义对象。

我觉得自己像个白痴,但是当我开始实际创建字典时..我对如何实例化和跟踪动态对象感到困惑。

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

我应该创建这些对象并将它们添加到列表中吗?人们通常如何做到这一点?我觉得我正在尝试编写编写更多代码的代码?

【问题讨论】:

  • 需要澄清:“创建字典或自定义对象”是指“创建字典 of 自定义对象 (s)”吗?机会? “对于该目录中特定类型的每个文件,创建”是指为找到的每种不同类型的文件创建一个单独的(字典)吗?

标签: python object dictionary


【解决方案1】:
track_list = [custom_object(filename) for filename in directory]

where directory 是您关心的文件名列表,这是一种非常常见的模式。如果你想要一个包含关键字文件名的字典,你可以这样做:

custom_dict = dict((filename, custom_object(filename)) for filename in directory)

【讨论】:

    【解决方案2】:

    @nmichaels 的回答是最简洁和最 Pythonic 的方式。更短的方法是:

    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}
    

    【讨论】:

      【解决方案3】:
      my_objects = {name:customObject(name) for name in dir if isMyType(name)}
      

      【讨论】:

      • 嘿,确实如此。 3之后2.7出来了,但现在我有理由升级了!去能力,去。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 2010-11-30
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多