尝试向 Python 字典添加新键时出现 keyerror python

Posted

技术标签:

【中文标题】尝试向 Python 字典添加新键时出现 keyerror python【英文标题】:Getting a keyerror python when trying to add a new key to a Python dictionary 【发布时间】:2022-01-22 13:16:43 【问题描述】:

在下一个代码中,当我尝试向字典添加新键时,我收到了 KeyError。

def tournamentWinner(competitions, results):
    record = 
    winner = None
    for i in range(len(results)):
        if results[i] == 0:
            if record[competitions[i][1]] not in record:
                record[competitions[i][1]] = 3
            else:
                record[competitions[i][1]] += 3
        else:
            if record[competitions[i][0]] not in record:
                record[competitions[i][0]] = 3
            else:
                record[competitions[i][0]] += 3
    for element in record:
        if winner is None:
            winner = element
        if element > winner:
            winner = elemnt
    return winner

我收到了这个 KeyError:

Exception Detected: 
Traceback (most recent call last):
  File "/tester/program.py", line 7, in tournamentWinner
    if record[competitions[i][1]] not in record:
KeyError: 'C#'

【问题讨论】:

您正在查看record[competitions[i][1]] 的值是否是记录的一部分。如果competitions[i][1] 在记录中,则不会。 【参考方案1】:

您收到该错误是因为在您使用 if-else 检查时,record 中不存在 competitions[i][1] 键。

您可以使用dict.get 方法解决此问题:

而不是这个 if-else:

if record[competitions[i][1]] not in record:
                record[competitions[i][1]] = 3
            else:
                record[competitions[i][1]] += 3

你可以使用

record[competitions[i][1]] = record.get(competitions[i][1], 0) + 3

【讨论】:

以上是关于尝试向 Python 字典添加新键时出现 keyerror python的主要内容,如果未能解决你的问题,请参考以下文章

Python:创建后冻结字典键[重复]

如何在python中将一对添加到字典中?

是否有一个 python 函数可以返回一个添加了新键的新字典,比如 clojure 中的 assoc?

当我在循环中添加到字典时有新键时创建一个新列表

尝试将装饰器添加到 models.Manager 时出现 Python Django 错误

python 字典 与 集合 的特点,及它们背后的散列表