如何在python中的Dictionary条件中执行字符串加字符串操作?

时间:2013-11-07 21:43:49

标签: python python-3.x dictionary

我的功能就像

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]为每个键分配值(这些来自团队列表,我们的团队就像b c d ......)。在{int}方法运行后,x[item.index(" "):item.index(" ")+1]部分将返回一个值。但是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'

我无法理解代码中的错误究竟是什么。

3 个答案:

答案 0 :(得分:3)

我不太确定你在这里尝试做什么(对于初学者来说,考虑使用比x更多的描述性变量名称),但问题出在这里:

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

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

我想,你想要的是:

wDict[item] = wDict.get(item, 0) + int(x[item.index(" "):item.index(" ")+1])
如果该密钥不存在,

.get()将使用密钥和默认值。

您可能还想使用Counter中的collections类,该类旨在将不存在的键默认为零,仅适用于此类情况。

答案 1 :(得分: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])

答案 2 :(得分:0)

当wDict [item]尚未初始化时,看起来你正在尝试使用wDict [item]作为同一赋值语句中的rvalue和lvalue。

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

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