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}}} /代码>