【发布时间】:2015-11-12 02:17:33
【问题描述】:
有这样的字典
my_pets = {
'Rudolf': {
'animal': 'cat',
'legs': 4
}
}
实现以下等价物的更清洁方法是什么?
my_pets['Rudolf']['legs']['front-right']['injured'] = True
my_pets['Rudolf']['legs']['front-left']['injured'] = False
它应该更新为
my_pets = {
'Rudolf': {
'animal': 'cat',
'legs': {
'front-right': {'injured':True},
'front-left': {'injured':False}
}
}
}
【问题讨论】:
-
我认为您想在这里创建一些类,而不是将所有数据放入嵌套的字典中。这是我能想到的让它“更干净”的唯一方法。注意:使用您当前的数据表示,您的方式是最简洁的访问方式
-
稍微编辑了这个问题,我现在的丑陋之处在于,我不得不通过检查它们的存在并在不存在时创建空字典并移动到下一个深度来手动链接它们。
-
使用
collections.defaultdict(lambda: collections.defaultdict)而不是字典。这可能有助于更新过程 -
@inspectorG4dget 这是正确的方向,但不会超过一个级别,因为在顶层访问缺少的键会创建一个
defaultdict而没有初始化默认工厂。因此,每当您尝试访问 second 级别的缺失键时,都会引发KeyError。
标签: python dictionary