2016-02-21 1 views
0

Новое для Python - есть ли простой способ перебора списка кортежей и расчета с использованием порога производительности (т. Е. Ежедневных продаж% за/в рамках запланированных продаж)? Пожалуйста, смотрите информацию ниже:Перечислить список кортежей и словарь для вычисления calc

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 
+2

Может вы можете указать пример расчета, который вы хотите иметь между тремя? – rbaleksandar

+0

Спасибо за быстрый ответ - чтобы упростить мой вопрос, есть простой способ просто сравнить каждый элемент списка с его одним и тем же элементом словаря (например, если $ 150 000> $ 140 000, а затем напечатать «Over» else «Under»). Если я могу понять, что могу включить пороговое произведение ... – hegemony

ответ

0

Поскольку вы новичок в Python вот простой способ сделать это без слишком сложный синтаксис:

# For each tuple inside daily_sales 
for sale in daily_sales: 
    # Use the first element of that tuple as a key and check if it's inside the dictionary budgeted_sales 
    if sale[0] in budgeted_sales: 
    # Compare the value stored for that key with the second element of the tuple (which contains the other price) and print stuff 
    if budgeted_sales[sale[0]] > sale[1]: print('Over') 
    else: print('Under') 

проверка выше не является обязательной, однако это гарантирует, что вы не прямо доступ к словарю с помощью ключа, который не существует, а затем попытаться добавить несуществующее значение с несуществующими один.

+0

@hegemony Btw, если вы хотите сделать некоторые вычисления и сохранить результаты для более позднего, вы можете легко добавить пустой список перед циклом, сделать свою вещь со значениями из всех трех источников, а затем добавить результат в этот список. – rbaleksandar

+0

Да, это сработало - спасибо! – hegemony

+0

Добро пожаловать^_^ – rbaleksandar

0

Я предполагаю, что вы ищете что-то вроде этого:

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

Важный бит здесь является то, что кортежи неизменны, поэтому доступ к нему с помощью ссылки на позицию (например, i [0]). Записи Dict можно получить с помощью ссылки их ключа (например, myDict [ «MYKEY»]

Я надеюсь, что это помогает

+1

Будучи неизменным, значит, его нельзя изменить; это не означает, что он имеет целые индексы. Вы верны в отношении целых индексов, но у вас есть неправильная причина. – zondo

1

Чтобы все было просто, вы можете сделать это в цикле. Первая строка l через каждую пару кортежей в 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% 
+0

Очень полезно - спасибо! – hegemony

0

Просто потому, что никто не упомянул об этом, вы можете распаковать в цикл, чтобы сделать код более простым для понимания (в том числе 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% 
+0

Ницца - огромное спасибо! – hegemony

Смежные вопросы