2016-09-29 4 views
1
Fruits = ['apple', 'orange', 'banana', 'kiwi'] 

A = [4, 3, 10, 8] 

B = {'apple': {'Bill': 4, 'Jan': 3, 'Frank': 5}, 
    'orange': {'Bill': 0, 'Jan': 1, 'Frank': 5}, 
    'banana': {'Bill': 8, 'Jan': 6, 'Frank': 2}, 
    'kiwi': {'Bill': 4, 'Jan': 2, 'Frank': 7}} 

Я пытаюсь суммировать все плоды A и умножать это на B. У меня возникают проблемы с этим. A - это массив из числа чисел, а B - Словарь. Здесь я смущаюсь. Я новый пользователь Python. Числа в А находятся в том же положении относительно Фруктов (первое число в А - количество яблок). Включит ли это использование суммы (A)?Суммирование по массиву, а затем умножение на словарь

Извините, что люди из-за отсутствия деталей. Вот некоторая ясность. У меня есть плоды, и у меня есть количество фруктов, которые каждый человек основывает на типе. Я хотел подвести все значения каждого типа фруктов в B таким образом, что я получаю:

apple = 12 
orange = 6 
banana = 16 
kiwi = 13 

Теперь я хочу нескольких этих чисел, на А, но имея в виду, что первое число A, это яблоко, то оранжевый, и так далее, чтобы получить новый массив:

Solution = [48,18,160,104] #solution order is apple, orange, banana, kiwi 
+4

Вопрос не ясен. Каким будет ожидаемый результат с этими данными? – zvone

+0

показать математику, как вы бы ее разобрали вручную, и мы сможем помочь – ccarton

+0

Спасибо. Я сейчас работаю над обновлением своего вопроса. –

ответ

3

Предполагая, что вы хотите multply сумму фруктов для каждого человека (в B) стоимостью в A, вы можете сделать следующий список понимание:

>>> [cost * sum(B[fruit].values()) for cost, fruit in zip(A, Fruits)] 
[48, 18, 160, 104] 
0
fruit_costs = {fruit_name:fruit_cost for fruit_name,fruit_cost in zip(Fruits,A) 
for fruit in Fruits: 
    print "Fruit:",fruit,"=",sum(B[fruit].values())*fruit_costs[fruit] 

я думаю?

+0

Я не вижу другого способа сделать это, если они не хотят получить сумму по имени (т. Е. «Билл», «Ян» и «Фрэнк» здесь.) –

0

Объединить все в один большой словарь; все здесь только свойства фруктов:

>>> for i, fruit in enumerate(fruits): 
>>>  B[fruit]['cost'] = A[i] 
>>> B 
{'banana': {'Frank': 2, 'Jan': 6, 'Bill': 8, 'cost': 10}, 'apple': {'Frank': 5, 'Jan': 3, 'Bill': 4, 'cost': 4}, 'orange': {'Frank': 5, 'Jan': 1, 'Bill': 0, 'cost': 3}, 'kiwi': {'Frank': 7, 'Jan': 2, 'Bill': 4, 'cost': 8}} 

Rename "B" до "фрукты" (проигравшие старое значение "фрукты"): стоимость фруктов

>>> fruits = B 

Рассчитайте для каждого плода:

>>> for fruitname in fruits: 
...  fruit = test.B[fruitname] 
...  fruit['total'] = fruit['Frank'] + fruit['Bill'] + fruit['Jan'] 
...  fruit['total cost'] = fruit['cost'] * fruit['total'] 
... 
>>> fruits 
{'banana': {'total': 16, 'Frank': 2, 'Jan': 6, 'total cost': 160, 'Bill': 8, 'cost': 10}, 'apple': {'total': 12, 'Frank': 5, 'Jan': 3, 'total cost': 48, 'Bill': 4, 'cost': 4}, 'orange': {'total': 6, 'Frank': 5, 'Jan': 1, 'total cost': 18, 'Bill': 0, 'cost': 3}, 'kiwi': {'total': 13, 'Frank': 7, 'Jan': 2, 'total cost': 104, 'Bill': 4, 'cost': 8}} 

Рассчитать общую стоимость:

>>> total = sum(fruits[fruit]['total cost'] for fruit in fruits) 

Или, если это последняя строка неудобно, так как вы новичок в Python, вы можете расширить его в:

>>> total = 0 
>>> for fruitname in fruits: 
...  fruit = fruits[fruitname] 
...  total += fruit['total cost'] 
... 

Так или иначе:

>>> total 
330 
Смежные вопросы