2016-10-17 42 views
1

我有一本字典Python的 - 找到最高字典鍵與值大於零

{0: 12, 1: 1, 2: 13, 3: 7, 4: 0} 

我想找到大於0

在這種情況下,最高值辭典鍵,答案是3.

這樣做的最佳方法是什麼?

+0

如果所有鍵都是負數或非數字,應該返回什麼? –

+0

'max([i for i,j in k.items()if j> 0])' –

+0

對於我的使用,鍵不會是負數或非數字 – Vermillion

回答

2

您可以使用maxdict.items()做到這一點:

d = {0: 12, 1: 1, 2: 13, 3: 7, 4: 0} 

highest = max(i for i,j in d.items() if j > 0) 
+2

不能在空列表上調用max 。如果無返回,則返回錯誤。 – kpie

+0

@kpie我會把它留給OP找出自己的想法。我已經回答了他們想要的問題。對於其他任何事情,他們應該開一個新的問題否則,只是我爲他們編寫完整的代碼。 –

+0

這對我很好,謝謝 – Vermillion

3

使用genexpr濾除 「壞」 的價值觀,並max記住這仍然是最高:

# On Py2, use .iteritems() instead of .items() 
max(k for k, v in mydict.items() if v > 0) 

或者如果您需要有一個默認值,如果沒有提供任何例外的密鑰條件,則不需要:

# Py3 max has default, which makes this super-easy: 
max((k for k, v in mydict.items() if v > 0), default=SOMEVALUEGOESHERE) 

# Py2 doesn't have default; workaround is to catch exception and use a default (EAFP): 
try: 
    mymax = max(k for k, v in mydict.iteritems() if v > 0) 
except ValueError: 
    mymax = SOMEVALUEGOESHERE 

# Or if you can't do that for some reason, make a listcomp instead of genexpr 
# and check for at least one surviving key before calling max (LBYL) 
goodkeys = [k for k, v in mydict.iteritems() if v > 0] 
mymax = max(goodkeys) if goodkeys else SOMEVALUEGOESHERE 
+0

不計入空列表異常。 – kpie

+2

@kpie:嗯?那它呢?評論說沒有鑰匙將是否定的或非數字的,但是這與這裏的答案無關。它檢查值,並且(可選)處理'dict'沒有正值的鍵的可能性。 __Edit__:評論改變了,但是,我在發佈後立即添加了處理,這就是爲什麼'max'可以採用'默認'參數。 – ShadowRanger

+0

默認不是python 2中max的一個選項。 – kpie