代码之家  ›  专栏  ›  技术社区  ›  user791134

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

  •  -1
  • user791134  · 技术社区  · 4 年前

    我需要使用一个名为 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))
    
    3 回复  |  直到 4 年前
        1
  •  0
  •   D. Seah    4 年前

    你很接近,你的例子中有一个输入错误:-)

    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))
    
        2
  •  1
  •   Tim Biegeleisen    4 年前

    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}
    
        3
  •  -1
  •   JL0PD    4 年前

    第一:不需要每次尝试获取元素时都拆分行。 第二:将字符串转换为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