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 

Ich mache eine Funktion, die die Werte der Schlüssel in einem Wörterbuch als Eingabe nimmt und die Max und Min dieser Werte ausgibt. Alle Werte und Schlüssel sind Ganzzahlen. Ich möchte den Standard Max und Min als den Wert des ersten Schlüssels festlegen, aber aus irgendeinem Grund gibt es mir den obigen TypeError. Das ist mir seltsam, denn in this Thread scheint es die empfohlene Lösung zu sein.Einen Wert aus einem Wörterbuch in Python nach Index ziehen?

+0

Können Sie den 'dic' Inhalt anzeigen? – RomanPerekhrest

+0

Ihre Verwendung des Wortes ** Werte ** ist verwirrend. – shash678

+0

Wörterbücher sind nicht geordnet, Sie haben also keine Garantie, dass der "erste" Wert gleich ist. –

Antwort

1

Da dict.values() ein Objekt dict_values Typ zurückgibt. Um diese Arbeit zu machen, müssen Sie geben Guss es (oder Tupel) zur Liste als:

list(dic.values())[0] 

Probelauf:

>>> 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

Vielen Dank für Ihre schnelle Antwort. Da dies mein erster Beitrag ist, bin ich sehr begeistert, den Stack-Overflow weiterhin als Referenz zu verwenden. –

+1

Dies ist ** gefährlich **: 'dct.values ​​()' ist inhärent ** ungeordnet **. Bei jedem Anruf können Sie eine andere Bestellung erhalten. – TemporalWolf

+0

Das stimmt. Ich habe dir nur geholfen, das Problem zu finden, mit dem du konfrontiert warst. Wenn Sie die Reihenfolge beibehalten möchten, sollten Sie auf keinen Fall 'dict.values ​​()' des normalen 'dict' verwenden. Sie können sich jedoch davon abwenden, indem Sie 'collections.OrderedDict' verwenden, dessen' dict.values ​​() 'die geordnete Antwort zurückgibt. –

0

Sie können die gleichen kürzer mit Einbauten tun:

def max_n_min(dic): 
    return (max(dic.values()), min(dic.values())) 
Verwandte Themen