在定义一个函数时遇到困难,这将使创建字典变得容易

2024-09-28 20:47:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 函数代码字典def错误avgplayerprint
2条回答

最简单的解决方案是使用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定义为dictdefaultdict。当我们这样做时:

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

如果players还没有betts键,则会动态创建一个新键,并将空的dict作为值。因此,我们可以将"avg": 340添加到这个新的dict中

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

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

相关问题 更多 >