Python 使用defaultdict添加/更新dict

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

我知道我可以执行以下操作来在Python字典中添加/更新密钥

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
您可能已经自己解决了所有这些问题,现在是时候提出解决建议了:

  • 使用
    defaultdict(dict)
    将不存在的条目作为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
您可能已经自己解决了所有这些问题,现在是时候提出解决建议了:

  • 使用
    defaultdict(dict)
    将不存在的条目作为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类似于自定义初始化函数的想法。将其设置为更复杂、真实的用例。我喜欢自定义初始化函数的想法。将其设置为更复杂、真实的用例。