我正在尝试创建一个player_def
函数,这将使创建字典变得更加容易。
现在看一下,这可能有点愚蠢,因为我可以做players["betts"]["avg"]=340
,对吗?无论如何,要了解Python的工作原理,如果您能解释以下代码为什么返回键错误而不是创建嵌套字典,将不胜感激。
def player_def(x,y,z):
players[x][y]=z
player_def("betts","avg",340)
print(players["betts"])
答案 0 :(得分:1)
最简单的解决方案是使用collections.defaultdict:
from collections import defaultdict
players = defaultdict(dict)
def player_def(x,y,z):
players[x][y] = z
player_def("betts","avg",340)
print(players["betts"])
# {'avg': 340}
我们将players
定义为defaultdict
中的dict
。当我们这样做时:
players["betts"]["avg"] = 340
如果players
还没有betts
密钥,则将以空的dict
作为值即时创建一个新密钥。因此,我们可以将"avg": 340
添加到此新字典中。
答案 1 :(得分:0)
这是您的意思吗?抱歉,我的查询未在评论中回答您的问题,因此我不得不将其作为可能的解决方案/解释。
>>> d={}
>>> d
{}
>>> d['a'] = {'b' : {'c','d','e'} }
>>> d
{'a': {'b': {'c', 'e', 'd'}}}
>>>
>>> d['a']['b']
{'c', 'e', 'd'}
//// EDIT:因此,当字典已经存在时,则可以更改其内容。但是,如果要添加新对(在现有键的右侧),则必须在语法上方添加不存在的现有键。我想我解释的很复杂,很抱歉。
>>> 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}}
>>>