Python 在定义使创建字典更容易的函数时遇到问题

Python 在定义使创建字典更容易的函数时遇到问题,python,dictionary,debugging,Python,Dictionary,Debugging,我正在尝试创建一个player_def函数,它将使创建字典变得更容易 现在来看,这可能有点愚蠢,因为我可以做玩家[“betts”][“avg”]=340,对吗?无论如何,为了理解Python是如何工作的,如果你们能解释为什么下面的代码返回一个键错误而不是创建一个嵌套字典,我将不胜感激 def player_def(x,y,z): players[x][y]=z player_def("betts","avg",340) print(players["betts"]) 最简单的解决方案是使用

我正在尝试创建一个
player_def
函数,它将使创建字典变得更容易

现在来看,这可能有点愚蠢,因为我可以做
玩家[“betts”][“avg”]=340
,对吗?无论如何,为了理解Python是如何工作的,如果你们能解释为什么下面的代码返回一个键错误而不是创建一个嵌套字典,我将不胜感激

def player_def(x,y,z):
  players[x][y]=z
player_def("betts","avg",340)
print(players["betts"])

最简单的解决方案是使用:

我们将
player
定义为
dict
defaultdict
。当我们这样做时:

players["betts"]["avg"] = 340

如果
players
还没有
betts
键,则会动态创建一个新的
dict
空值。因此,我们可以在这条新的指令中添加“平均值”:340。

你是说这个吗?很抱歉,我的问题没有在评论中回应您的问题,因此我不得不将其作为可能的解决方案/解释

>>> d={}
>>> d
{}
>>> d['a'] = {'b' : {'c','d','e'} }
>>> d
{'a': {'b': {'c', 'e', 'd'}}}
>>>
>>> d['a']['b']
{'c', 'e', 'd'}
///编辑:所以当字典已经存在时,你可以更改它的内容。但是,如果要添加新的对(到现有密钥的右侧),则必须向现有密钥添加一个不存在的语法。我想我解释得很复杂,对不起

>>> d['a']['b'] = "4"
>>> d
{'a': {'b': '4'}}
>>> d['a']['b'] = ["4","test","hello"]
>>> d
{'a': {'b': ['4', 'test', 'hello']}}
>>> d['a']['b'] = (1,2,3,4)
>>> d
{'a': {'b': (1, 2, 3, 4)}}
>>>
Python控制台中的另一个示例:

>>> test = {}
>>> test['betts']['avg'] = 300
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'betts'
>>> test['betts'] = {}
>>> test['betts']['avg'] = 300
>>> test
{'betts': {'avg': 300}}
>>>
>test={}
>>>测试['betts']['avg']=300
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
KeyError:“betts”
>>>测试['betts']={}
>>>测试['betts']['avg']=300
>>>试验
{'betts':{'avg':300}
>>>

谢谢。我是Python新手。你能解释一下defaultdict函数在这个例子中做了什么吗?嘿,我尝试了players[“betts”][“avg”]=340,它为“betts”返回了一个键错误,显然没有在字典“players”中创建一个键。另外,我不知道如何更好地格式化注释,以便代码在courier或其他任何地方。首先,您必须指定
players
变量是字典类型。只有这样,你才能向字典中添加任何项目。这是通过使用
players=dict()
直接声明变量来完成的,或者通过为变量分配一个空字典来完成的,即
players={}
。但是,您正在将字典对
{a:b}
添加到一个尚不存在的变量中。此外,您希望使用嵌套字典(字典中的字典…或…二维数据字段)。这使得情况更加复杂。尝试使用Python控制台测试功能。@Ajefferson谢谢。在代码的前面,我已经将播放器定义为字典。我只发布了我认为相关的部分。好的,然后告诉我如何声明这个变量。你到底想解释什么?我不明白,对不起。@GaryPalstor对错误的编辑表示抱歉。重拨一下。祝你好运@s3n0我从player_dict_导入players编写,然后players被定义为一大块代码,我不知道如何在这里添加注释:/似乎玩家[“betts”]={“avg”:340}可以定义变量,但玩家[“betts”][“avg”]=340不能。你知道为什么吗?很抱歉,这并不是对您问题的回答,但我使用的是您在代码第4行中使用的逻辑。
>>> test = {}
>>> test['betts']['avg'] = 300
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'betts'
>>> test['betts'] = {}
>>> test['betts']['avg'] = 300
>>> test
{'betts': {'avg': 300}}
>>>