【问题标题】:What to do if collections.defaultdict is not available?如果 collections.defaultdict 不可用怎么办?
【发布时间】:2010-09-25 02:46:09
【问题描述】:

Solaris python 2.4.3:

from collections import defaultdict 

不存在..

请告知使用多级词典的替代方法:

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

非常感谢 应用

【问题讨论】:

    标签: python collections


    【解决方案1】:

    setdefault?

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

    【讨论】:

    • 请注意,这要求您每次使用新的顶级密钥时都使用setdefault
    【解决方案2】:

    作为setdefault 的替代品,如果您想要额外的字典功能,请尝试

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

    【讨论】:

    • @Aaron 我刚刚决定改用setdefault 来处理这个功能,因为它可以完成工作。 (我不太确定为什么我在里面有那个new=...)
    • 好点。这就是我凌晨 1 点以后发生的事情。我想我需要去睡觉了。修好了……我想。如果您发现任何问题,请告诉我:)
    • 我也有同样的想法,但我最初并没有看到如何正确地做到这一点。再次更新答案。
    【解决方案3】:

    最近24小时内回复looks-like-it-works code(通过搜索“defaultdict”找到,选择“newest”或“active” order)

    【讨论】:

    • @Imran,我将把它留给 John Machin,但实际上在他的帖子中显示我的代码意味着比仅仅链接到它可能没有实际感觉的更强烈的认可。此外,不清楚他是否专门指的是我的代码,因为线程上有另一个答案,他没有专门链接到我的代码。当然,如果他想在他的帖子中使用它,欢迎他使用它。
    • 我认为他已经足够具体了,因为只有 2 个答案,并且按照“最新”或“活跃”的顺序,您的答案排在首位。
    • @Imran:编辑的想法不是改变答案的整个基调,而是试图为 OP 提供有关如何为自己找出问题的线索。 “看起来它有效”是一个不无道理的背书。 Newest/active 是所有匹配问题的排序,而不仅仅是 Aaron 回答的问题的答案。
    【解决方案4】:

    我只是想知道为什么不使用带有元组作为哈希键的单级字典?

    【讨论】:

    • 因为这会强制记录跟踪哪些元组已被定义为客户端代码上的键,这在存在干净和健壮的替代方案(例如 Michael Mior 的答案中)的情况下是愚蠢的。
    • 嗨,很抱歉没有回复 - 我在周末无法使用盒子 - Michael Mior 的建议是完美的。谢谢 - applom
    猜你喜欢
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多