2017-01-17 2 views
-1
def max_n_min(dic): 
dic_list = dic.items()[0] 
max = min = dic_list 
for value in dic.values(): 
    if value > max: 
     max = value 
    if value < min: 
     min = value 
return(max, min) 

<ipython-input-16-5837f0a5d1aa> in max_n_min(dic) 
    1 #Sums births for a requested periods 
    2 def max_n_min(dic):  
----> 3  dic_list = dic.values()[0] 
    4  max = min = dic_list 
    5  for value in dic.values()  
TypeError: 'dict_values' object does not support indexing 

사전의 키 값을 입력으로 사용하여 최대 값과 최소값을 출력하는 함수를 만들고 있습니다. 모든 값과 키는 정수입니다. 첫 번째 키의 값으로 기본 최대 값과 최소값을 설정하고 싶지만, 어떤 이유로이 값이 위의 TypeError를 제공합니다. 이것은 this 스레드에 있기 때문에 나에게 이상한 해결책 인 것 같습니다.사전에서 값을 파이썬으로 색인으로 가져 오겠습니까?

+0

'dic' 콘텐츠를 표시 할 수 있습니까? – RomanPerekhrest

+0

** ** 값 **이라는 단어의 사용은 혼란 스럽습니다. – shash678

+0

사전은 순서가 지정되지 않으므로 "첫 번째"값이 동일 할 것이라는 보장이 없습니다. –

답변

1

dict.values()dict_values 유형의 개체를 반환합니다.

list(dic.values())[0] 

샘플 실행 :이 작업을하려면 입력-캐스팅으로 나열 (또는 튜플)이

>>> my_dict = {1: 2, 3: 4} 

# Your syntax; raising error 
>>> my_dict.values()[1] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'dict_values' object does not support indexing 

# type-casted to list; works fine 
>>> list(my_dict.values())[1] 
4 
+0

을 사용합니다. 빠른 응답을 가져 주셔서 감사합니다. 이것은 첫 번째 게시물이므로 스택 오버플로를 계속 사용하는 것에 대해 매우 열정적입니다. –

+1

이것은 ** 위험합니다 ** :'dct.values ​​()'는 본질적으로 ** 정렬되지 않은 **입니다. 전화 할 때마다 다른 순서를 얻을 수 있습니다. – TemporalWolf

+0

사실입니다. 방금 직면 한 문제를 찾는 걸 도왔습니다. 순서를 유지하기를 원한다면, 보통'dict'의'dict.values ​​()'를 사용해서는 안됩니다. 그러나'collections.OrderedDict'를 사용하여 dict.value()가 순서가 지정된 응답을 반환하는 것을 막을 수 있습니다. –

0

당신은 같은 짧은 사용하여 내부 작업을 수행 할 수 있습니다

def max_n_min(dic): 
    return (max(dic.values()), min(dic.values())) 
관련 문제