使用.format()

时间:2016-03-13 18:09:14

标签: python file-io

编写一个名为calculate_expenses的函数,该函数接收文件名作为参数。该文件包含有关人员物品费用的信息。您的函数应返回基于项名称排序的元组列表。每个元组由项目名称和该项目的总费用组成,如下所示:

enter image description here

请注意,文件的每一行只包含一个项目,并且该项目的购买价格用逗号分隔。在物品或价格之前或之后可能有空格。然后你的函数应该读取文件并返回一个元组列表,如:

enter image description here

注意:

  • 元组根据商品名称排序,即面包在牛奶之前的芯片之前。

  • 总费用是以$开头的字符串,小数点后的准确度为两位数。

提示:使用${:.2f}为总费用正确创建和格式化字符串。

到目前为止的代码:

def calculate_expenses(file_name):
file_pointer = open(file_name, 'r')
data = file_pointer.readlines()
list_main=[]
for line in data:
    name, price = line.strip().split(',')
    print (name, price)

输出:

('milk', '2.35')
('bread ', ' 1.95')
('chips ', '    2.54')
('milk  ', '    2.38')
('milk', '2.31')
('bread', '    1.90')

我无法摆脱空间,不知道下一步该做什么。

2 个答案:

答案 0 :(得分:0)

可以通过以下方式解决:

def calculate_expenses(filename):
    file_pointer = open(filename, 'r')
    # You can use either .read() or .readline() or .readlines()
    data = file_pointer.readlines()
    # NOW CONTINUE YOUR CODE FROM HERE!!!

    my_dictionary = {}
    for line in data:
        item, price= line.strip().split(',')

        my_dictionary[item.strip()] = my_dictionary.get(item.strip(),0) + float(price)
    dic={}
    for k,v in my_dictionary.items():
        dic[k]='${0:.2f}'.format(round(v,2))

    L=([(k,v) for k, v in dic.iteritems()])
    L.sort()

    return L

答案 1 :(得分:0)

在python3中我们没有“迭代项”。 您应该在这一行中使用“item”:

L=([(k,v) for k, v in dic.iteritems()])