0

我的功能就像

def calResult(w,t,l,team):
    wDict={}
    for item in team:
        for x in w:
            wDict[item]=int(wDict[item])+int(x[item.index(" "):item.index(" ")+1])
        for x in t:
            wDict[item]=int(wDict[item])+int(x[item.index(" "):item.index(" ")+1])
    return wDict

假设我创建了空字典,然后我用它wDict[item]来为每个键分配值(这些来自团队列表,我们有像 abc d ... 这样的团队)。该x[item.index(" "):item.index(" ")+1]部分将在 int 方法运行后返回一个值。但是python shell返回了那个

Traceback (most recent call last):
  File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 66, in <module>
  File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 59, in calResult
builtins.KeyError: 'Torino'

我不明白我的代码中的错误到底是什么。

4

3 回答 3

3

我不太确定您要在这里做什么(考虑使用比x, 更具描述性的变量名称),但问题是:

wDict[item]=int(wDict[item])+...

第一次执行此操作时,wDict[item]不存在,因此KeyError.

我想,你想要的是:

wDict[item] = wDict.get(item, 0) + int(x[item.index(" "):item.index(" ")+1])

.get()如果该键不存在,则使用一个键和一个默认值。

您可能还想使用Counterin 中的类collections,该类旨在将不存在的键默认为零以用于这种情况。

于 2013-11-07T21:48:55.507 回答
1

你不能wDict[item]第一次访问,因为你的字典是空的

这没关系:

wDict[item] = 1

但你不能这样做:

wDict[item] = wDict[item] + 1

也许你想使用这种语法:

wDict[item] = int(wDict.get(item, 0)]) + int(x[item.index(" "):item.index(" ") + 1])
于 2013-11-07T21:46:48.127 回答
0

当 wDict[item] 尚未初始化时,看起来您正试图在同一赋值语句中使用 wDict[item] 作为右值和左值。

wDict[item]=int(wDict[item])+int(x[item.index(" "):item.index(" ")+1])

您正在尝试访问键项的“值”,但没有初始化键值对。

于 2013-11-07T21:47:39.633 回答