2013-12-04 4 views
2

вот идея: у меня есть orderedDict вроде так (упрощенно):Накопив orderedDict

{'012013': 3, '022013': 1, '032013': 5} 

, что я хочу сделать, это сделать все ценности, накопленные каким-то итерация через него. НАПРИМЕР, Я хочу, чтобы конечный результат, чтобы походить на это (на основании приведенного выше примера)

{'012013': 3, '022013': 4, '032013': 9} 

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

for key, value in month_dictionary.iteritems(): 
    month_dictionary[key] = month_dictionary[key] + month_dictionary[previous_key] 

Я предполагаю, что это не плохая практика, потому что orderedDict подразумевает, что он поддерживает порядок, поэтому он должен быть стабильным, нет? Как мне это сделать?

спасибо

+0

Просто хранить предыдущий ключ в переменной и игнорировать первую запись в пункты. –

+1

Вы можете использовать это как предлог для перехода на Python 3: 'OrderedDict (zip (d, itertools.accumulate (d.values ​​())))'. – DSM

ответ

4

Трека в общем:

total = 0 
for key, value in month_dictionary.iteritems(): 
    total += value 
    month_dictionary[key] = total 

заказ не будет затронут; только новые ключи добавят к заказу.

Демо:

>>> from collections import OrderedDict 
>>> month_dictionary = OrderedDict((('012013', 3), ('022013', 1), ('032013', 5))) 
>>> total = 0 
>>> for key, value in month_dictionary.iteritems(): 
...  total += value 
...  month_dictionary[key] = total 
... 
>>> month_dictionary 
OrderedDict([('012013', 3), ('022013', 4), ('032013', 9)]) 
+0

wow Я сейчас чувствую себя глупо ... спасибо – corvid

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