2017-01-28 3 views
0

다음 사전 목록이 있습니다. 나는 시작과 종료 시간을 토대로 아웃풋을 얻고 싶었다. 둘 이상의 요일이 같은 타이밍 일 경우 출력과 같이 조합하여 표시해야합니다.주어진 파이썬 사전 목록에서 사전의 요소를 일치시키는 방법은 무엇입니까?

timings = [ 
    {'day': 'Monday', 'start': '8:00 am', 'close': '5:00 pm'}, 
    {'day': 'Tuesday', 'start': '7:00 am', 'close': '4:00 pm'}, 
    {'day': 'Wednesday', 'start': '7:00 am', 'close': '4:00 pm'}, 
    {'day': 'Thursday', 'start': '8:00 am', 'close': '5:00 pm'}, 
    {'day': 'Friday', 'start': '9:00 am', 'close': '4:00 pm'}, 
    {'day': 'Saturday', 'start': '9:00 am', 'close': '4:00 pm'}, 
    {'day': 'Sunday', 'start': '8:00 am', 'close': '5:00 pm'} 
] 

출력 :

Monday   - 8:00 am - 5:00 pm 

Tuesday-Wednesday - 7:00 am - 4:00 pm 

Thursday   - 8:00 am - 5:00 pm 

Friday-Saturday - 9:00 am - 4:00 pm 

Sunday   - 8:00 am - 5:00 pm 
+0

아마 datetime 객체를 사용하면 훨씬 쉽습니다. –

+0

@AChampion yea, 물론,하지만 당신은 여전히 ​​문자열로 시간이 있습니다. –

+0

@ juanpa.arrivillaga이 문제에 대해서는 문자열 비교가 충분하지 않을지 모르겠다. ''9:00 am '=='9:00 am '-> True' – AChampion

답변

4

이 문제에 대한 간단한 해결책은 itertools.groupby을 사용하는 것, 예를 들면 :이 ... 문자열을 사용 성가 시게 어려울 것입니다

>>> import itertools as it 
>>> for (start, close), days in it.groupby(timings, lambda t: (t['start'], t['close'])): 
... print('{:20} - {} - {}'.format('-'.join(d['day'] for d in days), start, close)) 
Monday    - 8:00 am - 5:00 pm 
Tuesday-Wednesday - 7:00 am - 4:00 pm 
Thursday    - 8:00 am - 5:00 pm 
Friday-Saturday  - 9:00 am - 4:00 pm 
Sunday    - 8:00 am - 5:00 pm 
+0

매우 좋습니다! - '타이밍'에 일의 순서가 맞는지, '그룹 비'가 이미 키에 의해 정렬 된 목록을 기대한다는 사실을 이용할 수 있다는 것을 깨닫지 못했습니다. 후자의 사실에 대한 (짧은) 설명을 추가하는 것이 도움이 될 수 있습니까? –

+0

고마워. 나는 문자열 비교와 모두를 사용하여 시도했다. 큰 코드로 끝났다. @ 조나단 설명 해줘서 고마워. –

관련 문제