2010-06-24 14 views
18

Ich habe ein Wörterbuch, das soGet max Schlüssel im Wörterbuch

MyCount= {u'10': 1, u'1': 2, u'3': 2, u'2': 2, u'5': 2, u'4': 2, u'7': 2, u'6': 2, u'9': 2, u'8': 2} 

I höchste Schlüssel benötigen, die 10 aussieht, ist aber ich versuche, wenn max(MyCount.keys()) es gibt 9 als höchste.
Gleiches für max(MyCount).

Das Wörterbuch wird dynamisch erstellt.

Antwort

30

Dies, weil u'9' > u'10' ist, da sie Saiten sind.

Um numerisch zu vergleichen, verwenden Sie int als Schlüssel.

max(MyCount, key=int) 

(.keys() Aufruf ist in der Regel nicht erforderlich)

+7

Der Aufruf von 'dict.keys' ist normalerweise überflüssig. –

1
max(map(int, MyCount)) 

Oder wenn Sie der Rückgabewert soll die ursprüngliche Zeichenfolge sein:

max(MyCount, key=int) 
+0

Der Aufruf von 'dict.keys' ist hier (und an den meisten Stellen) unnötig und möglicherweise ineffizient. –

1

Da Ihre Schlüssel-Strings sind, sind sie im Vergleich lexikografisch und ‚9‘ ist der höchste in der Tat Wert.

Was Sie suchen ist so etwas wie: max(int(k) for k in MyCount)

1

Das ist Ihr Problem:

>>> u'10' > u'9' 
False 

effektiv, sind Sie die Zeichen '1' und '9' hier zu vergleichen. Was Sie wollen, ist dies wahrscheinlich:

max(long(k) for k in MyCount) 

oder das Wörterbuch mit Zahlen als Schlüssel erstellen (anstelle von Strings).

0

Sie verwenden max für Zeichenfolgenwerte. Sie müssen sie in int konvertieren. Versuchen Sie so etwas wie:

print(max([int(s) for s in MyCount.keys()])) 

Oder wie Tim vorgeschlagen:

print(max(int(s) for s in MyCount)) 
+1

Sie benötigen weder die eckigen Klammern noch die '.keys()' Methode. –

+0

Danke, Antwort aktualisiert. –

17

Sie müssen die tatsächlichen numerischen Werte vergleichen. Momentan vergleichen Sie die Strings lexigraphisch.

max(MyCount, key=int) 
+2

die einzige pythonische Antwort. – SilentGhost

Verwandte Themen