2014-09-15 3 views
-2

목록 사전에서 각 키의 최대 값을 추출하려면 어떻게해야합니까? 예를사전 목록에서 각 키의 최대 값을 찾는 방법은 무엇입니까?

나는 다음과 같은 결과를 반환하려는
#Generate some sample data 
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] 
d = defaultdict(list) 
for k, v in s: 
    d[k].append(v) 

>>> d.items() 
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])] 

를 들어

:

blue 4 
red 1 
yellow 3 

나는 실패 사전을 통해 반복하고 목록의 값을 추출 노력했다. 그러나 값을 추출하여 적절한 키에 연결하는 방법을 찾지 못하는 것 같습니다.

+0

@jonrsharpe 내가 게시물에 귀하의 의견을 언급 한 점에 유의하시기 바랍니다. – Borealis

+0

다소 희미하게 - [최소 예] (http://stackoverflow.com/help/mcve) 및 간결한 설명 (오류 추적 또는 입력 및 예상 및 실제 출력)이 유용합니다. – jonrsharpe

답변

4
for k, v in d.items(): 
    print k, max(v) 
1

사전에 결과를 표시하려면 한 줄짜리 생성기 식을 사용할 수 있습니다. 모든 가능한 값의 목록을 주위를 유지해야하고, 단지 최대가 필요하지 않은 경우

items = {'blue': [2, 4], 'yellow': [1, 3], 'red': [1]} 
maxitems = {k : max(items[k]) for k in items} 
2

,이 그것을 할 것입니다 :

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] 
d = dict(sorted(s)) 

d을 지금 :

{'blue': 4, 'yellow': 3, 'red': 1} 

sorted(s)은 튜플을 오름차순으로 정렬하며 dict 생성자는 최종 (가장 높은) 결과 만 반영합니다.

보너스 : 당신이 최소 값을 원하는 경우, dict(sorted(s, reverse=True)) 당신에게 그것을 줄 것이다 :

{'blue': 2, 'red': 1, 'yellow': 1} 
+0

이 솔루션은 "멋진 해킹"섹션에 분류 될 수 있다고 생각합니다. 그러나 코드를보다 읽기 쉽고 효율적으로 만드는 방법을 알지 못합니다. – 5gon12eder

+1

@ 5gon12eder 나는 그것에 대해서도 여러 가지 감정을 가지고있다. "튜플 목록 정렬"관용구는 Schwartzian 변형 및 기타 정렬 트릭과 같습니다 : 강력하고 유용하지만 ... 아직은 약간의 트릭입니다. –

관련 문제