在Python中将字符串解析为整数时出现问题

在Python中将字符串解析为整数时出现问题,python,python-3.x,Python,Python 3.x,我需要使用名为sales的多行字符串作为输入数据显示每个销售人员本周的总销售额。我已经能够成功地返回一个名为dic的字典,但是销售数字仍然是字符串,并且我无法为每个销售人员合计它们,因为当我使用int()方法解析它们时,它抛出了一个错误,例如,int(I.split(“;”)[-1]) 另外,作为旁注,有人知道为什么我不能用(I.split(“;”)[1])从输入中获取星期几吗?谢谢 电流输出: {'': '', 'Lauren': '91', 'Tim': '83'} 期望输出 {'Laur

我需要使用名为
sales
的多行字符串作为输入数据显示每个销售人员本周的总销售额。我已经能够成功地返回一个名为
dic
的字典,但是销售数字仍然是字符串,并且我无法为每个销售人员合计它们,因为当我使用
int()
方法解析它们时,它抛出了一个错误,例如,
int(I.split(“;”)[-1])

另外,作为旁注,有人知道为什么我不能用
(I.split(“;”)[1])
从输入中获取星期几吗?谢谢

电流输出:

{'': '', 'Lauren': '91', 'Tim': '83'}
期望输出

{'Lauren': 10, 'Tim': 11}
我当前的代码:

sales = '''
Lauren;Tuesday;9
Tim;Wednesday;8
Tim;Thursday;3
Lauren;Friday;1
'''

def salesCalc(sales):
    dic = {}
    for i in sales.splitlines():
        if i.split(";")[0] in dic:
            dic[i.split(";")[0]] += i.split(";")[-1]   
        else:
            dic[i.split(";")[0]] = i.split(";")[-1]
    return dic

print(salesCalc(sales))

第一:不需要每次尝试获取元素时都拆分行。 第二:要将字符串转换为int,请使用
int


def salesCalc(销售):
dic={}
对于销售中的i.splitlines():
拆分=i.拆分(“;”)
如果拆分为[0]:
如果在dic中拆分[0]:
dic[splitted[0]+=int(splitted[-1])
其他:
dic[splitted[0]]=int(splitted[-1])
返回dic

当前脚本有两个问题。首先,示例
sales
输入应该从第一行的数据开始。您以一个空行开始的版本,这会导致循环选择空字符串作为第一个键/值。其次,您需要将字典的
RHS
int()
包装起来,以处理实际的数字。正如以前一样,您正在进行字符串连接。将这两者结合起来:

sales = '''Lauren;Tuesday;9
Tim;Wednesday;8
Tim;Thursday;3
Laurent;Friday;1
'''

def salesCalc(sales):
    dic = {}
    for i in sales.splitlines():
        if i.split(";")[0] in dic:
            dic[i.split(";")[0]] += int(i.split(";")[-1])
        else:
            dic[i.split(";")[0]] = int(i.split(";")[-1])
    return dic

print(salesCalc(sales))  # {'Tim': 11, 'Lauren': 9, 'Laurent': 1}

您非常接近,示例中有一个输入错误:-)

sales=''
劳伦;星期二;9
提姆;星期三;8.
提姆;星期四;3.
劳伦;星期五;1.
'''
def salesCalc(销售):
dic={}
对于sales.splitlines()中的行:
attrs=line.split(“;”)
如果LeN(AtTrs)>1:这是为了确保我们只考虑数据行,因为我们可以得到“AS”行。
#这只是一条捷径,也可以写成
#如果驾驶员信息中心中的属性[0]:
#dic[attrs[0]]=dic[attrs[0]]+int(attrs[-1])
#其他:
#dic[attrs[0]]=int(attrs[-1])
dic[attrs[0]]=dic[attrs[0]]+int(attrs[-1])如果dic else int(attrs[-1])中的attrs[0]
返回dic
打印(销售计算器(销售))

您上面的代码不起作用。int()不起作用,因为它抛出了一个错误:
ValueError:int()的文本无效,以10为基数:“'dic[splitted[0]]=int(splitted[-1])salesCalc(Solution.py)print(salesCalc(sales))中的第25行(Solution.py)
非常感谢您指出了输入错误!你能解释一下你是如何用dic[attrs[0]]=dic[attrs[0]]+int(attrs[-1])处理第一个空行的吗?如果dic else int(attrs[-1])中的attrs[0],它是由
如果len(attrs)>1:
处理的。我的意思是你能解释一下
如果len(attrs)>1:dic[attrs]=dic逻辑背后的思维过程吗[attrs[0]]+int(attrs[-1])如果dic else int(attrs[-1])中的attrs[0]为attrs[0]
?谢谢!对不起,我已在我的答案中添加了注释