【问题标题】:How to do a string plus string operation in Dictionary condition in python?如何在python中的字典条件下进行字符串加字符串操作?
【发布时间】:2013-11-07 21:43:49
【问题描述】:

我的功能是这样的

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 一样的团队......)。 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'

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

【问题讨论】:

    标签: python python-3.x dictionary


    【解决方案1】:

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

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

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

    我认为你想要的是:

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

    .get() 接受一个键和一个在该键不存在时使用的默认值。

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

    【讨论】:

      【解决方案2】:

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

      这样就好了:

      wDict[item] = 1
      

      但你不能这样做:

      wDict[item] = wDict[item] + 1
      

      也许你想使用这个语法:

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-23
          • 1970-01-01
          • 1970-01-01
          • 2014-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多