定义一个使字典更容易创建的功能时遇到麻烦

时间:2019-03-09 19:20:16

标签: python dictionary debugging

我正在尝试创建一个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"])

2 个答案:

答案 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}}
>>>