比较日期,价格,名称和类别,并打印最有利可图的名称

时间:2016-01-11 01:43:02

标签: python file

我正在制作程序,为日期范围内的文件中的每个类别打印最有利可图的元素。

date_cat_profit_dict = {}

with open("data.txt") as f:
    for line in f:
        date, category, name, profit = line.split("|")
        profit = int(profit)

        composite_key = "{0}|{1}".format(date, category)

        _, max_profit = (date_cat_profit_dict.setdefault(composite_key, ("", 0)))

        if max_profit < profit:
            date_cat_profit_dict[composite_key] = (name, profit)

for composite_key, (name, profit) in date_cat_profit_dict.items():
    print("{0} --> {1}".format(composite_key, name))

文件示例:

05/01/2016|category6|Name8|4200
06/01/2016|category1|Name1|1000
07/01/2016|category2|Name2|1200
07/01/2016|category3|Name1|1000
07/01/2016|category1|Name2|1200
07/01/2016|category3|Name2|1200
07/01/2016|category2|Name1|1000
07/01/2016|category2|Name2|1200
07/01/2016|category2|Name2|1200
08/01/2016|category2|Name1|1000
09/01/2016|category4|Name7|3100

日期将始终处于重新订购状态。

问题:

我必须实现范围o日期的用户条目。该程序将打印所有文件。另外,我对一个类别有两个不同的名称。

此计划的示例。

07/01/2016|category2 --> Name2
09/01/2016|category4 --> Name7
07/01/2016|category3 --> Name2
07/01/2016|category1 --> Name2
08/01/2016|category2 --> Name1
06/01/2016|category1 --> Name1
05/01/2016|category6 --> Name8

我的例外结果:

当程序启动时,它询问我的开始日期和结束日期,之后它将为每个类别打印最有利可图的元素。

输入

开始时间:07/01/2016

结束:2016年8月1日

输出:

类别1:名称2

Category2:Name2

类别3:名称3

1 个答案:

答案 0 :(得分:0)

我没有提供详细的代码,而是向您提供缺失的部分。

日期时间比较工具

>>> import time
>>> date_1 = time.strptime('08/01/2016','%d/%m/%Y')
>>> print date_1
time.struct_time(tm_year=2016, tm_mon=1, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=8, tm_isdst=-1)
>>> date_2 = time.strptime('09/01/2016','%d/%m/%Y')
>>> print date_2
time.struct_time(tm_year=2016, tm_mon=1, tm_mday=9, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=9, tm_isdst=-1)
>>> 
>>> date_1 < date_2
True

使用复合键进行Dict:

您需要拥有dict的绑定密钥,之后您才能将其分开。

选项1: 使用2层dict,即

date_cat_profit_dict[date_str] = dict()
date_cat_profit_dict[date_str][cat_str] = dict()
date_cat_profit_dict[date_str][cat_str]['name'] = name
date_cat_profit_dict[date_str][cat_str]['profit'] = profit
date_cat_profit_dict[date_str][cat_str]['date'] = date_1 #date object

选项2:

date_cat_profit_dict[(date_str, cat_str)] = dict()
date_cat_profit_dict[(date_str, cat_str)]['name'] = name
date_cat_profit_dict[(date_str, cat_str)]['profit'] = profit
date_cat_profit_dict[(date_str, cat_str)]['date'] = date_1 #date object

希望它能帮助您找到解决问题的正确方法。