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입니다. 또한 dict에서 가장 큰 시간표 여야합니다. 여기파이썬은 값이 합계가되는 키를 제거합니다.

내가 그것을 해결하기 위해 노력하고있어 방법은 다음과 같습니다

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

내 생각은 (DICT) 분류 끝에 가장 큰 사람과 timedeltas의 목록을 반환합니다. 나는 목록에서 가장 큰 timedelta 각 키와 일치하는 x는 6에 도달 할 때까지 X & 해당 키를 제거하기 위해 그 값을 합산하지만이 반환 수 :

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

다시 난처한. 나는 그 값의 집계 합이 도달 할 때까지 당신이 가장 큰 timedeltas 삭제를 추론 코멘트에서

+2

이름으로 dict', 당신은 내장을 마스킹하는'사용하지 마십시오 유형. –

+0

이 질문을보십시오 당신을 돕는 경우에 참조하십시오 - http://stackoverflow.com/questions/1060279/iterating-through-a-range-of-dates-in-python – Dayan

+0

만약 가장 큰 키의 합이 * 정확히 6 아닌가요? –

답변

1

6.

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

감사합니다. 그것은 제시된 문제에 대해 잘 작동했습니다. 나는 이것을 좀더 테스트 할 것이고 또한 가장 큰 키의 합이이 경우처럼 정확하지 않을 때 시나리오를 볼 것입니다. – koogee

관련 문제