2010-06-24 119 views
18

MAX鍵我有一本字典,看起來像這樣獲取字典

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} 

我需要的是10最高鍵,但如果我嘗試max(MyCount.keys())它給出9最高。
max(MyCount)相同。

字典是動態創建的。

回答

30

這是因爲u'9' > u'10',因爲它們是字符串

要進行數值比較,請使用int作爲關鍵字。

max(MyCount, key=int) 

(呼叫.keys()通常是不必要的)

+7

調用'dict.keys'通常是多餘的。 – 2010-06-27 00:54:59

1
max(map(int, MyCount)) 

或者,如果你想返回值是原始的字符串:

max(MyCount, key=int) 
+0

調用'dict.keys'在這裏(和大多數地方)是不必要的,可能效率低下。 – 2010-06-27 00:56:11

1

由於您的鍵是字符串,它們是字典順序比較,「9」是最大值確實如此。

你在找什麼是一樣的東西:max(int(k) for k in MyCount)

1

這是你的問題:

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

實際上,你要比較的字符 '1' 和 '9' 在這裏。你想要的可能是這樣的:

max(long(k) for k in MyCount) 

或創建與數字作爲關鍵字(而不是字符串)的字典。

0

對字符串值使用max。你必須將它們轉換爲int。嘗試是這樣的:

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

或者蒂姆·建議:

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

你既不需要方括號也不需要'.keys()'方法。 – 2010-06-24 07:57:04

+0

謝謝,回覆更新。 – 2010-06-24 08:23:08

17

你需要比較實際的數值。目前,您正在用文字比較字符串。

max(MyCount, key=int) 
+2

唯一的pythonic答案。 – SilentGhost 2010-06-24 09:28:22