如何计算列表中文件中的费用并将其更改为元组(python)

How to calculate expenses in a file in list and change it to tuple(python)

伙计们,我无法解决这个问题... 我有一个文件 'text.CSV' 像这样:

milk,2.35
bread , 1.95
 chips ,    2.54
milk  ,    2.38
milk,2.31
bread,    1.90

def 获取文件,它应该 return 这个:

[('bread', '.85'), ('chips', '.54'), ('milk', '.04')]

我该怎么做?我尝试了不同的方法!但我无法解决 我的解决方案:

def calculate_expenses(filename):
    file_pointer = open(filename, 'r')
    data = file_pointer.readlines()
    f=[]
    f2=[]
    for i in data:
        x=i.split(',')
        for j in x:
            a=x[0].strip()
            b=x[1].strip()
            a=a.strip('\n')
            b=b.strip('\n')
            b=b.split()
            b.insert(0,'$')
            b="".join(b)
            f.append(a)
            f.append(b)
            f2.append(f)
            f=[]
            break
    return f2
filename='text.CSV'
print(calculate_expenses(filename))

它returns:

[['milk', '.35'], ['bread', '.95'], ['chips', '.54'], ['milk', '.38'], ['milk', '.31'], ['bread', '.90']]

有人可以帮我吗?

最简单的方法是使用字典:每次遇到一行时,您将检查该值是否在字典中,如果不在则创建它。然后您将添加值。

def calculate_expenses(filename):
    #your dict of results :
    dres={}
    file_pointer = open(filename, 'r')
    data = file_pointer.readlines()
    f=[]
    f2=[]
    for i in data:
        x=i.split(',')
        a=x[0].strip()
        b=x[1].strip()
        a=a.strip('\n')
        b=b.strip('\n')
        if a not in dres:
            dres[a]=0
        dres[a]+=float(b)
        f2=[]
        #outputting the correct format : as an array of tuples
        for k in dres.keys():
            f2+=[(k,'${:.2f}'.format(dres[k]))]
    return f2
filename='text.CSV'
print(calculate_expenses(filename))

如果你不反对使用pandas:

import pandas as pd

df = pd.DataFrame.from_csv('text.csv',index_col=None,header=None)
df[0] = df[0].apply(lambda x:x.strip())
df = df.groupby(0).sum().reset_index()
mylist = zip(df[0],map(lambda x: '${:.2f}'.format(x),df[1]))
def calculate_expenses(filename):
    d= {}
    file_pointer = open(filename, 'r')
    data = file_pointer.readlines()
    for line in data:
        line = line.strip().split(',')
        my_item = line[0].strip()
        my_price = float(line[1].strip())

        if my_item not in my_dictionary:
            d[my_item] =  my_price
        else:
            d[my_item] +=  my_price
    l= []
    my_keys = sorted(d.keys())
    for x in my_keys:
        l.append((x,"${0:.2f}".formatd[x])))
    return l