Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据条件向字典添加键?_Python_Python 2.7_Dictionary - Fatal编程技术网

Python 根据条件向字典添加键?

Python 根据条件向字典添加键?,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,正如我们在下面的代码中所看到的,rname被添加为一个键(如果它存在),否则我们将创建一个没有rname的结构 有什么方法可以更优雅地处理这个问题,因为在创建对象之前,必须在代码中的很多地方检查这个条件。可以将rname动态添加到字典中 class AutoViviDict(dict): def __missing__(self, key): value = self[key] = type(self)() return value def some

正如我们在下面的代码中所看到的,
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

并不是说您当前的代码太差,而是您还可以:

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}}}

您可以消除重复代码:

def some_function(rname, adapt, sw, cls, somevalue):
    d = AutoViviDict()
    if rname:
        d = d[rname]
    d[adapt][sw][cls] = somevalue
    return d

你的代码很好。至少它是可读的。谢谢!这肯定是这样的:如果我们考虑“jjESHA的例子<代码> > >打印(某物函数(‘a’,‘b’,‘c’,‘d’,‘SaleVeUE’)){‘c’:{‘:’SeValue'}} } >打印(某物函数(无,‘B’,‘C’,‘D’,‘SaleVeU'’)){{ C′:{‘:’SeValue}}} /代码>