2017-04-06 6 views
-1

사전의 키 요소를 비교하려고합니다. 먼저 모든 키의 첫 번째 요소를 비교하고 가장 높은 값을 가진 요소가 두 개 이상있는 경우 해당 키의 두 번째 요소를 비교합니다. 예를 들어Python - 사전의 키 요소를 비교하여 키 중 하나를 반환합니다

:

>>> my_dict = { 111: [50, 2, 34], 122: [50 , 4, 45], 133: [40, 1, 12], 144: [20, 5, 77]} 

1)는 가장 높은 값의 첫 번째 요소를 찾는다. 결과 같아야

('111', '122') 

2) 낮은 값 '111'과 '112'의 두 번째 요소를 찾는다. 결과는 다음과 같아야합니다

('111') 

나는 최대 값으로 키를 찾을 수 this 토론을 발견했다. 동일한 최대 값을 갖는 여러 개의 키를 반환하는 한 가지 해결책은 다음과 같습니다.

>>> stats = {'a':1000, 'b':3000, 'c': 100, 'd':3000} 
>>> [key for key,val in stats.iteritems() if val == max(stats.values())] 
['b', 'd'] 

이 키는 하나의 요소 만 가질 수 있다는 점에서 문제가 있습니다. 여러 요소가있는 키에 대해이를 수행하는 방법을 알아야합니다.

>>> [item[0] for item in my_dict.values()] 
['50', '50', '40', '20'] 

그러나 나는 그들을 어떻게 다음을 비교합니까 :

은 내가 이런 식으로 각 키의 첫 번째 요소를 반환 할 수 있습니다 생각? 도와 주셔서 미리 감사드립니다. DICT에 대한 예제를 사용

+0

키에 신경 쓰지 않는다면,'my_dict.values ​​()'는리스트 (값)리스트를 줄 것이다. 그런 다음 목록을 비교할 수 있습니다. –

+0

당신은 for 루프, 또는'cmp()','sum()', 또는 numpy 같은 외부 라이브러리와 같은 함수를 사용하여 그렇게 할 수 있습니다. –

답변

1

, 다음은 당신의 정의

>>> stats = {'a':[1,2,3], 'b':[2,8,9], 'c': [3,4,5], 'd':[5,6,8]} 
>>> [key for key,val in stats.items() if sum(val) == max([sum(i) for i in stats.values()])] 
['b', 'd'] 

에 맞게하고 무엇이든지 당신의 비교 나 할 거라고 나타납니다. 그러나 dicts 본질적으로 순서가 지정되어 있지 않으므로 이러한 종류의 비교에 대한 dict 사용하지 않는 것이 좋습니다. 가능하면 비교 목록 목록을 생성하는 데 사용법이나 정렬 된 (목록, 키) 방법을 사용하는 것이 좋습니다.

+0

이것은 요소의 합을 얻은 다음 합계의 최대 값을 찾습니다. 나는 첫 번째 요소를 찾은 다음 둘 이상의 요소가있는 경우 두 번째 요소를 찾아야합니다. 나는 그것을 목록으로 조사 할 것이다. 각 항목의 고유 한 식별자이기 때문에 키를 갖는 것이 좋았습니다. – Ebad