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

2024-10-03 11:19:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用名为sales的多行字符串作为输入数据显示每个销售人员一周的总销售额。我已经能够成功地返回一个名为dic的字典,但是销售数字仍然是字符串,我不能为每个销售人员合计它们,因为当我使用int()方法解析它们时,它会抛出一个错误

还有一个附带说明,有人知道为什么我不能用(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))

Tags: 数据方法字符串in字典人员数字int
3条回答

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

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}

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


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

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

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

def salesCalc(sales):
    dic = {}
    for line in sales.splitlines():
        attrs = line.split(";")
     
        if len(attrs) > 1: # this is to make sure that we only consider line with data because we can get '' as line
            # this is just short-cut, it can be also written as
            # if attrs[0] in dic:
            #     dic[attrs[0]] = dic[attrs[0]] + int(attrs[-1])
            # else:
            #     dic[attrs[0]] = int(attrs[-1])
            dic[attrs[0]] = dic[attrs[0]] + int(attrs[-1]) if attrs[0] in dic else int(attrs[-1])
    return dic

print(salesCalc(sales))

相关问题 更多 >