是否可以在移动中创建和更新python字典
我必须在for循环中创建一个嵌套字典。我已将父词典是否可以在移动中创建和更新python字典,python,python-2.7,Python,Python 2.7,我必须在for循环中创建一个嵌套字典。我已将父词典数据初始化为空。现在在循环中,我得到了要添加到父字典的键。每把钥匙都是一本字典 data = {} for condition Get x, y # x is the new key if x not in data: data[x] ={} data[x].update({y:1}) # or data[x][y] = 1 但我想在一行中完成上面的部分,如下所示 data = {
数据初始化为空。现在在循环中,我得到了要添加到父字典的键。每把钥匙都是一本字典
data = {}
for condition
Get x, y # x is the new key
if x not in data:
data[x] ={}
data[x].update({y:1}) # or data[x][y] = 1
但我想在一行中完成上面的部分,如下所示
data = {}
for condition
Get x, y # x is the new key
if x not in data:
data.update({x:{}}.update({y:1}))
这里我得到了TypeError:“NoneType”对象不可编辑
。我猜这是由于内部更新(即,update({y:1}
)首先执行,并尝试更新尚未出现的x
,因此NoneType
)
有没有其他方法可以在一行中实现这一点?或者我有没有唯一的方法先创建一个空字典,然后按照第一个代码段所示更新它?也可以实现data[x]={y:1}
或data.update({x:{y:1})
如@karthikr所述您是否正在尝试自动插入嵌套字典?如果是,您可以尝试使用:
这将打印1
您可以提供一些实际数据作为示例吗?或者使用普通的dict
,数据。setdefault(x,{})[y]=1
。通常效率低于defaultdict(dict)
,因为它需要创建一个空的dict
作为参数传递,即使默认值未使用(而且因为方法调用比原始的dict
getitem操作更昂贵),但是当您需要执行混合操作时,最好了解setdefault
,其中一些操作在缺少时会添加默认值,而另一些操作会像正常情况一样发出KeyError
。
from collections import defaultdict
data = defaultdict(dict)
for i in range(10):
x = "..."
y = "..."
data[x][y] = 1
print data["..."]["..."]