python - 根据条件向字典添加键?
问题描述
正如我们在下面的代码中看到的那样,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}}}
推荐阅读
- linux - 可以使用 Docker 从 macOS 运行 Linux CLI 工具吗?
- python - PyTorch DataLoader:每次调用时都遍历数据的子集而不是整个数据
- html - 在 html 中的特定时间自动播放声音(mp3)
- dart - 由于第 4 行中的一些已知错误,我的 dart 代码无法编译
- python - Pygame 有时无法检测到 KEYUP 或 KEYDOWN
- excel - 当某个单元格被填充时触发弹出消息
- python - python str.contains 带双引号
- lxml - 一个文档中的多个 lxml 树
- javascript - 如何在 Three.js 中获取相机上可见的所有对象
- r - 预测线图