2010-06-24 19 views
18

Ho un dizionario che assomiglia a questoAcquista chiave max nel dizionario

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} 

Ho bisogno tasto più alto che è 10 ma io se provo max(MyCount.keys()) dà 9 come il più alto.
Uguale a max(MyCount).

Il dizionario viene creato dinamicamente.

risposta

30

Questo perché u'9' > u'10', dal momento che sono stringhe.

Per confrontare numericamente, utilizzare int come chiave.

max(MyCount, key=int) 

(Calling .keys() di solito è inutile)

+7

Chiamare 'dict.keys' di solito è superfluo. –

1
max(map(int, MyCount)) 

Oppure, se si desidera che il valore di ritorno sia la stringa originale:

max(MyCount, key=int) 
+0

Chiamare 'dict.keys' è qui (e la maggior parte dei posti) non necessario e potenzialmente inefficiente. –

1

Dal momento che le chiavi sono stringhe, vengono confrontati lessicografico e '9' è il valore massimo in effetti.

Quello che state cercando è qualcosa di simile: max(int(k) for k in MyCount)

1

Questo è il tuo problema:

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

In effetti, si sta confrontando la caratteri '1' e '9' qui. Ciò che si vuole è probabilmente questo:

max(long(k) for k in MyCount) 

o creare il dizionario con i numeri come chiavi (invece di stringhe).

0

Si utilizza max per valori stringa. Devi convertirli in int. Provare qualcosa di simile:

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

O come Tim suggerito:

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

Non è necessario né le parentesi quadre né il metodo '.keys()'. –

+0

Grazie, risposta aggiornata. –

17

È necessario confrontare i valori numerici effettivi. Attualmente stai confrontando le stringhe lessicalmente.

max(MyCount, key=int) 
+2

l'unica risposta pitonica. – SilentGhost

Problemi correlati