迭代元组列表和字典以进行计算

时间:2016-02-21 01:22:08

标签: python loops dictionary

Python新手 - 是否有一种直接的方法来迭代元组列表并使用性能阈值(即每日销售额超过/低于预算销售额)进行计算?请参阅以下信息:

daily_sales = [('A',150000),('B',73000),('C',110000),('D',231000),('E',66000)] 
budgeted_sales = {'A':140000,'B':103000,'C':80000,'D':20000,'E':90000}
performance_threshold = .20

4 个答案:

答案 0 :(得分:1)

为了简单起见,您可以循环执行此操作。第一行循环遍历daily_sales中的每个元组对。对于第一对,item[1]是150000.然后它从字典中获得item[0](即A)。请注意,如果字典中没有匹配的项目,则会失败。

for item in daily_sales:
    performance = item[1] / float(budgeted_sales.get(item[0])) - 1
    if performance > 0:
        print "Over {0:.2%}".format(performance)
    else:
        print "Under {0:.2%}".format(performance)

Over 7.14%
Under -29.13%
Over 37.50%
Over 1055.00%
Under -26.67%

答案 1 :(得分:0)

我猜你要找的是这样的:

for i in daily_sales:
    if i[1] > budgeted_sales['A']:
    //Do something

这里重要的一点是元组是不可变的,所以你可以通过引用一个位置(例如i [0])来访问它。可以通过引用其密钥来访问Dict条目(例如myDict ['myKey']

我希望这有帮助!

答案 2 :(得分:0)

由于您是Python的新手,因此在没有过于复杂的语法的情况下,这是一种简单的方法:

strFilename = Replace(strFilename, Chr(9), " ") 

上面的检查是可选的,但是它确保您不会使用不存在的密钥直接访问字典,然后尝试添加不存在的值与现有的值。

答案 3 :(得分:0)

因为没有人提到它,你可以在for循环中解压缩以使代码更容易理解(包括performance_threshold):

for day, sales in daily_sales:
    performance =  float(sales) / budgeted_sales[day]
    if performance > 1+performance_threshold:
        print "Over {0:.2%}".format(performance)
    elif performance < 1-performance_threshold:
        print "Under {0:.2%}".format(performance)
    else:
        print "Target {0:.2%}".format(performance)

输出:

Target 107.14%
Under 70.87%
Over 137.50%
Over 1155.00%
Under 73.33%