Python 使用defaultdict添加/更新dict
我知道我可以执行以下操作来在Python字典中添加/更新密钥Python 使用defaultdict添加/更新dict,python,dictionary,Python,Dictionary,我知道我可以执行以下操作来在Python字典中添加/更新密钥 from collections import defaultdict mydict = defaultdict(list) mydict[x].append(y) 然而,就我目前的情况而言,我正试图通过添加一个额外的dict来了解如何使用此功能。我已经完成了以下操作,但显然没有达到预期效果 mydict[x].append({'newKey': []}) mydict[x]['newKey'].append(100) Trace
from collections import defaultdict
mydict = defaultdict(list)
mydict[x].append(y)
然而,就我目前的情况而言,我正试图通过添加一个额外的dict来了解如何使用此功能。我已经完成了以下操作,但显然没有达到预期效果
mydict[x].append({'newKey': []})
mydict[x]['newKey'].append(100)
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
mydict[x]['newKey'].append(100)
TypeError: list indices must be integers or slices, not str
好的,现在您正试图在mydict中添加一个字典,因此似乎应该使用
mydict=defaultdict(dict)
然后你可以做你想做的事:
In [2]: mydict = defaultdict(dict)
In [4]: mydict['x'] = {'newKey': []}
In [5]: mydict
Out[5]: defaultdict(dict, {'x': {'newKey': []}})
In [7]: mydict['x']['newKey'].append(100)
In [8]: mydict
Out[8]: defaultdict(dict, {'x': {'newKey': [100]}})
好的,现在您正试图在mydict中添加一个字典,因此似乎应该使用
mydict=defaultdict(dict)
然后你可以做你想做的事:
In [2]: mydict = defaultdict(dict)
In [4]: mydict['x'] = {'newKey': []}
In [5]: mydict
Out[5]: defaultdict(dict, {'x': {'newKey': []}})
In [7]: mydict['x']['newKey'].append(100)
In [8]: mydict
Out[8]: defaultdict(dict, {'x': {'newKey': [100]}})
当您尝试添加额外的dict时,您似乎混淆了dict和列表操作 关于您的代码片段的一些澄清:
从集合导入defaultdict
mydict=defaultdict(列表)
x='x'
y=‘巴’
#正在获取mydict的字段“x”。因为它不存在,并且
#mydict是默认的dict,这将创建一个键“x”映射
#返回值[]并返回它
mydict[x]
#因此,我们检索为我们创建的列表mydict,并添加一个元素
#里面。请注意,我们正在列表中插入y
mydict[x]。追加(y)
#获取相同的列表并在其中插入另一个元素
#mydict:
# {
#'x':['bar',{'newKey':[]}]
# }
mydict[x]。追加({'newKey':[]})
#…这就是为什么下面的命令不起作用
mydict['x']['newKey']#错误:mydict['x']是一个列表而不是dict
您可能已经自己解决了所有这些问题,现在是时候提出解决建议了:
- 使用
将不存在的条目作为dict而不是列表defaultdict(dict)
- 使用更复杂的初始化方法:
def init_entry():
返回{'newKey':[100]}
mydict=defaultdict(初始输入)
mydict['x']['newKey'].追加(24)
mydict['y']['newKey'].追加(37)
打印(mydict)
#{'x':{'newKey':[100,24]},'y':{'newKey':[100,37]}
当您尝试添加额外的dict时,您似乎混淆了dict和列表操作 关于您的代码片段的一些澄清:
从集合导入defaultdict
mydict=defaultdict(列表)
x='x'
y=‘巴’
#正在获取mydict的字段“x”。因为它不存在,并且
#mydict是默认的dict,这将创建一个键“x”映射
#返回值[]并返回它
mydict[x]
#因此,我们检索为我们创建的列表mydict,并添加一个元素
#里面。请注意,我们正在列表中插入y
mydict[x]。追加(y)
#获取相同的列表并在其中插入另一个元素
#mydict:
# {
#'x':['bar',{'newKey':[]}]
# }
mydict[x]。追加({'newKey':[]})
#…这就是为什么下面的命令不起作用
mydict['x']['newKey']#错误:mydict['x']是一个列表而不是dict
您可能已经自己解决了所有这些问题,现在是时候提出解决建议了:
- 使用
将不存在的条目作为dict而不是列表defaultdict(dict)
- 使用更复杂的初始化方法:
def init_entry():
返回{'newKey':[100]}
mydict=defaultdict(初始输入)
mydict['x']['newKey'].追加(24)
mydict['y']['newKey'].追加(37)
打印(mydict)
#{'x':{'newKey':[100,24]},'y':{'newKey':[100,37]}
mydict[x]
mydict[x].append(y)
?mydict[x][1][newKey].append(100)。。。注意-1在mydict[x]之后,mydict
是什么样子的。追加(y)
?mydict[x][1][newKey]。追加(100)。。。请注意-1I类似于自定义初始化函数的想法。将其设置为更复杂、真实的用例。我喜欢自定义初始化函数的想法。将其设置为更复杂、真实的用例。