2014-02-14 2 views
0
dict1 = {datetime.timedelta(3, 21388, 702926): 2, datetime.timedelta(10, 21388, 702926): 1, datetime.timedelta(3, 65011, 297074): 2, datetime.timedelta(14, 65011, 297074): 1, datetime.timedelta(17, 65011, 297074): 1, datetime.timedelta(0, 65011, 297074): 1, datetime.timedelta(7, 65011, 297074): 1, datetime.timedelta(10, 65011, 297074): 1, datetime.timedelta(0, 21388, 702926): 1} 

Я пытаюсь удалить timedeltas, сумма значений которого равна 6. Они также должны быть самыми большими timedeltas в dict.python удалить ключи, значения которых равны сумме

Вот как я пытаюсь решить:

x = 0 
for key in dict1: 
    if key in sorted(dict1)[-1] and x < 6: 
     x = x+dict1[key] 
     del dict1[key] 

Мое мышление сортируется (ДИКТ) возвращает список timedeltas с крупнейшими из них в конце. Я мог бы соответствовать каждому ключу с наибольшим timedelta в списке, обобщать его значение х & удалить этот ключ до тех пор, пока не достигнут й 6. Но это возвращает:

TypeError: argument of type 'datetime.timedelta' is not iterable 

Стумпед снова.

+2

Не используйте 'dict' как имя, вы маскируя встроенную в типе. –

+0

Посмотрите, если это вам поможет - http://stackoverflow.com/questions/1060279/iterating-through-a-range-of-dates-in-python – Dayan

+0

Что делать, если сумма самых больших ключей * не * точно 6? –

ответ

1

Из комментариев я вывожу, что вы хотите удалить самые большие timedeltas пока агрегируются сумма их значений не достигает 6.

values_sum = 0 
for key in sorted(dict1,reverse=True): 
    values_sum +=dict1[key] 
    del dict1[key] 
    if values_sum >= 6: 
     break  
+0

Спасибо. Он хорошо работал для представленной проблемы. Я собираюсь проверить его немного больше, а также посмотреть на сценарий, когда сумма наибольших ключей не является _exactly_ 6, как в этом случае. – koogee

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