首页 > 解决方案 > 根据条件向字典添加键?

问题描述

正如我们在下面的代码中看到的那样,rname如果存在,则将其添加为键,否则我们将创建一个没有rname.

有什么方法可以更优雅地处理这个问题,因为在创建对象之前,必须在代码中的很多地方检查这个条件。可以rname动态添加到字典中。

class AutoViviDict(dict):
    def __missing__(self, key):

        value = self[key] = type(self)()
        return value


def some_function(rname, adapt, sw, class):

        d = AutoViviDict()

        if rname:
            d[rname][adapt][sw][class]= somevalue
        else:
            d[adapt][sw][class] = somevalue

标签: pythonpython-2.7dictionary

解决方案


并不是说您当前的代码太糟糕了,但您也可以这样做:

class AutoViviDict(dict):
    def __missing__(self, key):
        value = self[key] = type(self)()
        return value

def some_function(rname, adapt, sw, cls):
        d = AutoViviDict()
        d[adapt][sw][cls] = 1
        if rname:
            d = AutoViviDict({rname: d})
        return d
        # Or even just
        # return AutoViviDict({rname: d}) if rname else d

print(some_function('a', 'b', 'c', 'd'))
# {'a': {'b': {'c': {'d': 1}}}}
print(some_function(None, 'b', 'c', 'd'))
# {'b': {'c': {'d': 1}}}

推荐阅读